Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
当信号到达且进程已在信号处理程序中时unix进程的行为?_Unix_Signals - Fatal编程技术网

当信号到达且进程已在信号处理程序中时unix进程的行为?

当信号到达且进程已在信号处理程序中时unix进程的行为?,unix,signals,Unix,Signals,我有一个进程,它已经在信号处理程序中,并被称为进程阻塞调用。如果这个过程再收到一个信号,会发生什么情况?我很确定在执行处理程序时,信号会被阻塞,但我很难找到确切的说法 此外,您可能希望看到-一些答案讨论了您应该和不应该从信号处理程序调用哪些函数 一般来说,你应该考虑一个信号处理程序,比如中断处理程序——在处理程序中尽可能地做,并快速返回。默认情况下,< P>不阻止。信号仅在其自身传输期间阻塞自身。因此,一般来说,一个处理代码可以被另一个信号传递中断。 您可以通过相对于每个信号传递设置进程信号掩码

我有一个进程,它已经在信号处理程序中,并被称为进程阻塞调用。如果这个过程再收到一个信号,会发生什么情况?

我很确定在执行处理程序时,信号会被阻塞,但我很难找到确切的说法

此外,您可能希望看到-一些答案讨论了您应该和不应该从信号处理程序调用哪些函数


一般来说,你应该考虑一个信号处理程序,比如中断处理程序——在处理程序中尽可能地做,并快速返回。默认情况下,

< P>不阻止。信号仅在其自身传输期间阻塞自身。因此,一般来说,一个处理代码可以被另一个信号传递中断。 您可以通过相对于每个信号传递设置进程信号掩码来控制此行为。这意味着您可以阻止(或序列化)信号传递。例如,您可以声明在处理信号S2时接受信号S1的中断,但不能接受相反的情况。。。
请记住,信号传递会在代码中引入一些并发性,因此需要控制阻塞。

我的代码的具体功能是——它有一个用于SIGUSR1的信号处理程序。在SIGUSR1的处理程序中,我调用了阻塞系统调用。因此,在执行信号处理程序时,整个过程被阻塞。此时,如果再次向进程发送SIGUSR1信号..行为是什么?第二个SIGUSR1将被阻止,直到您离开处理程序。在交付第一个SIGUSR1实例时,SIGUSR1被阻止(它处于挂起状态)。