我有一个fork
是孩子的程序。
我想抓住以下信号:SIGINT
,SIGPIPE
和SIGTERM
。
On Ctrl + c (生成SIGINT - afaik)我想确保在主程序终止之前杀死子进程,我在信号处理程序中执行。
现在我的期望/理解是在 Ctrl + c 上自动杀死父进程。但那并没有发生。
在 Ctrl + c 我得到了shell提示符,但我仍然可以在ps
中看到我的进程。所以基本上我的主程序不会被杀死。
我的理解错了吗?
编辑0 :一个观察:在 Ctrl + c 之前,ps
主程序状态显示为S
但在 Ctrl + c 之后I
。
答案 0 :(得分:0)
它在信号处理程序代码完成运行后被杀死,在你的情况下,它实际上不会消失,直到你在SIGINT的处理程序代码中放置的代码执行(如果你正确地写它,它应该关闭子进程)。 / p>
似乎您的处理程序代码执行错误但不允许进程退出,请发布处理程序代码以及如何设置处理程序,因为可以在SIGINT上执行SIGIGN(忽略)以便CTRL + C对你的程序没有任何帮助。
确保调用exit(0)或exit(1)或使用错误代码告诉进程终止,否则进程将不会退出。