Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当向pthread发出等待信号时进程终止;加入;_C_Multithreading_Join_Signals - Fatal编程技术网

C 当向pthread发出等待信号时进程终止;加入;

C 当向pthread发出等待信号时进程终止;加入;,c,multithreading,join,signals,C,Multithreading,Join,Signals,我正在尝试实现一个信号处理器。 每个pthread都是可连接的,并使用sigprocmask在所有信号上阻塞 当我使用 pthread_kill(_threads[threadIndex], SIGHALT); 如果在发送信号时被调用的pthread正在等待pthread_join,则整个进程立即终止。但是,如果线程没有等待连接,它会按预期忽略该信号。你知道为什么会发生这种情况,以及如何改变它吗 谢谢大家! 关于在多线程环境中使用sigprocmask()的问题,请参阅该方法手册页的以下摘录:

我正在尝试实现一个信号处理器。 每个pthread都是可连接的,并使用sigprocmask在所有信号上阻塞

当我使用

pthread_kill(_threads[threadIndex], SIGHALT);
如果在发送信号时被调用的pthread正在等待pthread_join,则整个进程立即终止。但是,如果线程没有等待连接,它会按预期忽略该信号。你知道为什么会发生这种情况,以及如何改变它吗


谢谢大家!

关于在多线程环境中使用
sigprocmask()
的问题,请参阅该方法手册页的以下摘录:

在多线程进程中未指定sigprocmask()的使用; 请参阅pthread_sigmask(3)


我对
SIGHALT
有点不确定,但假设它是
SIGSTOP
的同义词,那么
pthread\u kill()
的手册页中的以下内容可能会引起兴趣:

信号处理是进程范围的:如果信号处理程序是 安装后,将在线程中调用处理程序,但如果 信号的处理为“停止”、“继续”或“终止”, 这一行动将影响整个过程


进程是否已终止,或者
pthread\u join
是否返回错误代码,导致程序完成执行?是否有人知道
SIGHALT
?没见过。它与SIGSTOP相同吗?@Pavan Manjunath:可能是德国版的SIGSTOP?;-)这是什么操作系统?我对SIGHALT也不熟悉,我怀疑知道与答案有关…@Pavan Manjunath很抱歉缺少信息。。。SIGHALT是一个新的信号,我应该为了练习的目的而创建,使用宏和线程相互发送信号等等。。。所以你可以冷静下来,没有一个信号你不熟悉。事实证明,这个bug在其他地方,现在已经修复了。谢谢大家的回答。即使是德国人也不能忽略信号:)但是OP引用了一个线程成功忽略信号的情况。所以我猜
sigalt
不是
SIGSTOP