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