在大约相同的时间处理2个信号

时间:2012-12-04 14:32:58

标签: c linux signals

在Linux 2.6中,我希望我的进程同时捕获SIGHUP和SIGTERM以便有序退出。

当节点关闭时,日志显示它将首先处理SIGHUP(父进程接收SIGTERM)或SIGTERM。

我的问题是:是否有可能同时调用这些信号的处理程序?或者内核一个接一个地触发?

2 个答案:

答案 0 :(得分:0)

根据您的代码架构,您可以强制执行信号的同步读取,以防止出现任何并发问题。您可以使用signalfd,然后在想要检查任何未完成信号时从该fd读取。如果你需要他们在异步默认情况下使用信号处理程序,我认为你必须为你的信号处理程序做好准备,可能会中断。

man signalfd

答案 1 :(得分:0)

在进程的异步信号中,Linux内核通过系统调用向目标进程结构发送信号,当进程的上下文切换到RUN状态时,信号由根线程处理,并阻塞所有其他线程上的信号。由于每个线程的堆栈空间不同,因此每次都可以处理每个信号(如果错误则正确)。