在我的程序中,我期望線程A定期發送SIGUSR1
到線程B.在線程B中,它將阻塞在sigwait
。至於收到SIGUSR1
時該怎麼辦,我還沒有定義它。以下是我的代碼。但是,程序立即終止,輸出爲User defined signal 1
。pthread信號不起作用
void usr1_handler();
int main(int argc, char const *argv[])
{
pthread_t tid;
pthread_attr_t attr_obj;
void *thread(void *);
pthread_attr_init(&attr_obj);
pthread_attr_setdetachstate(&attr_obj, PTHREAD_CREATE_DETACHED);
pthread_create(&tid, &attr_obj, thread, (void *)NULL);
while(1)
{
int ret = pthread_kill(tid, SIGUSR1);
sleep(5);
}
return 0;
}
void *thread(void *dummy)
{
int sig;
sigset_t sigmask;
struct sigaction action;
/* set up signal mask to block all in main thread */
sigfillset(&sigmask);
pthread_sigmask(SIG_BLOCK, &sigmask, (sigset_t *)0);
for (;;)
{
int err = sigwait(&sigmask, &sig);
/* define what to do with sig here */
printf("sig is %d\n", sig);
}
pthread_exit((void *)NULL);
}
'SIGUSR'信號可能在子線程阻塞所有信號並達到'sigwait()'之前傳遞。 –
@AndrewHenle感謝您的回覆。但是主線程會永遠在while(1)循環中發送信號,即使第一個信號丟失,其餘的仍然會傳送,對嗎? – HuangJie
@黃傑如果這確實是發生了什麼,你的程序在第一個信號發送後已經崩潰了 –