CTRL + C没有杀死我的程序

时间:2011-08-07 08:26:12

标签: c unix signal-handling

我有一个fork是孩子的程序。 我想抓住以下信号:SIGINTSIGPIPESIGTERM

On Ctrl + c (生成SIGINT - afaik)我想确保在主程序终止之前杀死子进程,我在信号处理程序中执行。

现在我的期望/理解是在 Ctrl + c 上自动杀死父进程。但那并没有发生。

Ctrl + c 我得到了shell提示符,但我仍然可以在ps中看到我的进程。所以基本上我的主程序不会被杀死。

我的理解错了吗?

编辑0 :一个观察:在 Ctrl + c 之前,ps主程序状态显示为S但在 Ctrl + c 之后I

1 个答案:

答案 0 :(得分:0)

它在信号处理程序代码完成运行后被杀死,在你的情况下,它实际上不会消失,直到你在SIGINT的处理程序代码中放置的代码执行(如果你正确地写它,它应该关闭子进程)。 / p>

似乎您的处理程序代码执行错误但不允许进程退出,请发布处理程序代码以及如何设置处理程序,因为可以在SIGINT上执行SIGIGN(忽略)以便CTRL + C对你的程序没有任何帮助。

确保调用exit(0)或exit(1)或使用错误代码告诉进程终止,否则进程将不会退出。