我知道有一个默认的信号处理程序,即每个信号的一个函数,例如 SIGKILL 等。它写在哪个文件中?我尝试查看 signal.h,但在那里找不到它。
我希望每个信号处理程序至少有一个函数(处理程序)。
请帮我找到这个文件
答案1
没有你想看到的“文件”,除非你想阅读内核代码。
这有点过于简单化了。有关更多信息,请参阅“UNIX 环境中的高级编程”中 Rago & Stevens 关于信号的章节。
“默认信号处理”有两个部分。这些都内置于内核中。当调度程序注意到某个进程有一个待处理信号时,它会在必要时为该进程提供 cpu(上下文切换)。接下来,信号被传递到进程。该进程有一个信号掩码,如果故意设置掩码,则可以忽略很多信号,SIGKILL 和 SIGSTOP 两个信号不能被忽略或阻止。所以该进程现在有一个信号。如果没有设置处理程序,内核将对信号采取默认操作。
有一个信号默认操作列表。例如,SIGSEGV 在转储核心后终止进程。 Michael Kerrisk 对默认操作有解释。这就是我想你想要的。
http://man7.org/linux/man-pages/man7/signal.7.html
内核有代码来处理进程的所有这些信号的默认响应。
如果内核收到“自身”信号(取决于我们所讨论的 UNIX 风格),内核就会发生恐慌,写入故障转储,并让您头痛。 - 这不是你想要的。