Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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 大约同时处理2个信号_C_Linux_Signals - Fatal编程技术网

C 大约同时处理2个信号

C 大约同时处理2个信号,c,linux,signals,C,Linux,Signals,在Linux2.6中,我希望我的进程同时捕获SIGHUP和SIGTERM,以便有序退出 当节点关闭时,日志显示它将首先处理SIGHUP(父进程接收SIGTERM)或SIGTERM 我的问题是:是否有可能同时调用这些信号的处理程序?或者内核一个接一个地触发?根据您的代码体系结构,您可以强制同步读取信号,以防止出现任何并发问题。您可以使用signalfd,然后在需要检查任何未完成的信号时从该fd读取数据。如果您需要它们在异步默认情况下使用信号处理程序,我认为您必须为信号处理程序可能被中断做好准备 在

在Linux2.6中,我希望我的进程同时捕获SIGHUP和SIGTERM,以便有序退出

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


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

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


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

关于第一个问题,我想你不能这么做。但关于第二个问题,您可以在SIGHUP和viceversa的handler中进行提升(SIGTERM)。当然,您应该检查您是否没有与另一个处理程序联系。需要澄清的是:进程在关闭时同时接收SIGHUP和SIGTERM,因为它们由于关闭而接收SIGTERM,并且因为父进程也接收SIGTERM,并且会死亡。@AndresVelascoGarcia如果它是进程,信号处理程序不应该按顺序执行,从内核读取每个信号。错了就纠正我。