Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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 POSIX信号行为_C_Posix_Signals_Kill - Fatal编程技术网

C POSIX信号行为

C POSIX信号行为,c,posix,signals,kill,C,Posix,Signals,Kill,如果进程当前由于SIGTRAP信号而停止,并通过kill()发送SIGSTOP信号,那么默认行为是什么?SIGSTOP是否是在流程再次继续后发送的挂起信号?还是会被丢弃/忽略 如果SIGSTOP已排队,是否有任何方法将其从该进程外部的队列中移除,例如在跟踪进程中?来自信号(7)手册页: The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored. 一个简单的测试,应用程序在断点处停止,并向它发送一个SIGSTOP,

如果进程当前由于SIGTRAP信号而停止,并通过kill()发送SIGSTOP信号,那么默认行为是什么?SIGSTOP是否是在流程再次继续后发送的挂起信号?还是会被丢弃/忽略

如果SIGSTOP已排队,是否有任何方法将其从该进程外部的队列中移除,例如在跟踪进程中?

来自信号(7)手册页:

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
一个简单的测试,应用程序在断点处停止,并向它发送一个
SIGSTOP
,显示当我点击“下一步”时gdb显示一些信息。很明显,信号被传送到了应用程序。在我向其发送
SIGCONT
之前,无法继续对其进行调试

(gdb) next
Program received signal SIGSTOP, Stopped (signal).
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28
(gdb) next
Program received signal SIGCONT, Continued.
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28
(gdb) next
(gdb) 

“由于信号陷阱信号而停止”是什么意思?SIGTRAP不会停止进程;默认情况下,它将以核心转储终止,或者您可以将其更改为忽略信号或调用信号处理程序,但在任何情况下,SIGTRAP都不会自行停止进程。您可能会让其他进程(如调试器)使用ptrace(2)跟踪该进程,在这种情况下,它将在交付SIGTRAP之前停止,但在这种情况下,它由ptrace控制,在有ptrace\u CONT或其他ptrace操作继续该过程之前不会继续。

我还无法找到权威答案。OpenBSD手册页暗示了可能发生的情况,但不要以这种或那种方式给出明确的答案。请参阅,我正在跟踪另一个进程并充当调试器,因此当进程遇到断点时,它将被传递一个SIGTRAP,进程将停止。所以我只想知道它是否被停止,是否传递了SIGTRAP信号,如果随后SIGSTOP被传递到进程会发生什么?由于进程已经停止,它是挂起还是丢弃?