繁体   English   中英

POSIX信号行为

[英]POSIX signal behavior

如果由于SIGTRAP信号而当前进程停止并且通过kill()发送了SIGSTOP信号,那么默认行为是什么? SIGSTOP是否会在该过程再次继续后交付的待处理信号? 或者它会被丢弃/忽略?

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

从signal(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不会停止进程; 默认情况下,它将以核心转储终止,或者您可以将其更改为忽略信号或调用信号处理程序,但在任何情况下,SIGTRAP都不会自行停止该过程。 您可能会使用ptrace(2)跟踪某个其他进程(例如调试器)的进程,在这种情况下,它将在传递SIGTRAP之前停止,但在这种情况下,它将在ptrace的控制下停止,并且不会继续,直到有PTRACE_CONT或其他ptrace动作继续该过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM