linux:sigwait()优先于pthread_sigmask(SIG_UNBLOCK)?

时间:2015-07-29 23:52:22

标签: linux multithreading signals

在一个程序中,SIGCHLD被主线程阻止,然后

  1. 线程“THREAD_1”正在执行sigwait(),
  2. 线程“THREAD_2”分支子进程并将其终止,在此线程中我调用了pthread_sigmask(SIG_UNBLOCK,& set,0)以在杀死子进程之前解除对SIGCHLD的阻塞。
  3. 但是SIGCHLD仍然被sigwait()接收。

    除了在创建线程之前从main()解锁SIGCHLD之外,有没有办法使SIGCHLD绕过sigwait()?我不希望sigwait()处理SIGCHILD。

    谢谢,

1 个答案:

答案 0 :(得分:1)

每个the spec允许此行为:

  

为进程生成的信号应该传递给进程中的其中一个线程,其中[thread]正在调用sigwait()函数,选择该信号 [哪个主题]没有阻止信号传递。

(强调补充。)

只需从等待线程的选择掩码中删除SIGCHLD,程序就可以执行您想要的操作。