1

我正在尝试实现一个信号处理程序。每个 pthread 都被创建为可连接的,并且使用 sigprocmask 在所有信号上被阻塞。

当我向线程发送来自另一个线程的信号时,会出现问题,使用

pthread_kill(_threads[threadIndex], SIGHALT);

如果在发送信号时被调用的 pthread 正在等待 pthread_join,则整个过程立即终止。但是,如果线程没有等待加入,它会按预期忽略信号。知道为什么会发生以及如何改变它吗?

谢谢!

4

1 回答 1

0

关于sigprocmask()在多线程环境中的使用,请参见方法手册页的摘录:

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


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

信号处理是进程范围的:如果安装了信号处理程序,处理程序将在线程线程中调用,但如果信号处理是“停止”、“继续”或“终止”,此操作将影响整个过程。

于 2012-04-11T11:24:05.337 回答