我认为 Linux 信号是这样工作的:
每个进程都有一个针对每个信号的默认信号处理程序,某些信号的默认信号处理程序会终止进程,而其他信号的默认信号处理程序只是忽略该信号,等等。
下表显示了默认信号处理程序可以采取的所有操作(该表来自此文档):
学期 默认操作是终止进程。
伊格恩 默认操作是忽略该信号。
核 默认操作是终止进程并转储核心(请参阅 core(5))。
停止 默认操作是停止该进程。
续 默认操作是继续该进程(如果该进程当前已停止)。
您可以使用自己的信号处理程序覆盖默认信号处理程序信号()(我认为已弃用)或sigaction()。
到目前为止我的说法正确吗?
现在我的问题是:是否有一些信号您无法覆盖其默认信号处理程序?
答案1
您链接的两个手册页都提到了其处理程序不能被覆盖的信号。在signal(2)
:
这些信号
SIGKILL
不能SIGSTOP
被捕获或忽略。
在 sigaction(2)
:
签名指定信号,可以是除
SIGKILL
和之外的任何有效信号SIGSTOP
。