3

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

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

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

4

2 回答 2

0

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

于 2012-12-04T15:27:22.250 回答
0

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

人信号fd

于 2012-12-04T15:01:40.230 回答