【问题标题】:Catch all signals that would stop a program捕捉所有会停止程序的信号
【发布时间】:2017-02-23 04:47:52
【问题描述】:

我有一个程序可以捕捉任何终止信号。目前它所做的只是捕捉 Ctrl + C。除了 Ctrl + C 之外,我还希望能够捕获 Ctrl + ZCtrl + \。这是我的部分代码。

if (signal(SIGINT, SIG_IGN) == SIG_ERR)
    fprintf(stderr,"Error: Can't catch SIGINT\n");

if (signal(SIGTERM, SIG_IGN) == SIG_ERR)
    fprintf(stderr,"Error: Can't catch SIGTERM\n");

// do stuff

我需要执行哪些其他信号来捕获 Ctrl + ZCtrl + \?是什么引起了SIGTERM?提前致谢。

【问题讨论】:

  • IIRC,Ctrl+Z 引发 SIGTSTP,Ctrl+\ 引发 SIGQUIT
  • 你无法捕捉到 SIGKILL 或 SIGSTOP。
  • @immibis 如果你把它放在一个答案中,我会接受它。它完美地工作
  • signal(2) 的手册页列出了所有标准信号及其默认操作。您可以查看哪些终止了该列表中的进程。

标签: c signals sigint sigterm


【解决方案1】:

Ctrl+Z 引发 SIGTSTP。 Ctrl+\ 引发 SIGQUIT。

我不知道任何会引发 SIGTERM 的组合键,但是您当然可以使用 kill -TERM <pid><pid> 替换为进程 ID 来发送它。 (或者只是kill <pid>;SIGTERM 是kill 的默认信号)

请注意,您无法捕捉到 SIGSTOP 或 SIGKILL。

【讨论】:

  • SIGTERM 是当您没有明确指定时 kill 发送的默认信号。它是系统使用的一般“请求退出”信号,例如,在关闭、超额订阅或其他需要终止进程的问题时。
猜你喜欢
  • 2017-09-05
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-18
相关资源
最近更新 更多