接收信号

进程可以通过设置信号处理函数来定制对信号的反应,而非接受内核默认处理。

signal 系统调用signal(signum, handler) 是最简单的信号处理设置接口。handler 可以取三个值:

  • SIG_IGN:忽略该信号(SIGKILLSIGSTOP 不能被忽略)。
  • SIG_DFL:使用默认行为(终止、忽略、暂停或继续)。
  • 自定义函数指针:设置用户定义的信号处理函数。

sigaction 系统调用sigactionsignal 的更安全和更健壮的替代接口。它允许精确控制信号处理行为,包括设置信号屏蔽字、指定信号标志等。sigaction 是 POSIX 标准推荐使用的接口。

默认行为(常见信号):

  • SIGINT/SIGKILL/SIGSEGV/SIGTERM:终止进程。
  • SIGCHLD:忽略。
  • SIGSTOP/SIGTSTP:暂停进程。
  • SIGCONT:继续已暂停的进程。

信号处理的特点:信号处理程序是异步执行的,可能在程序执行的任何时刻被调用。这带来了并发安全问题——信号处理程序不能调用非可重入函数(如 printfmalloc),否则可能导致数据结构和状态的破坏。

链接到