我有一个fork
子程序。
我正在 try catch 以下信号: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) 或使用错误代码告诉进程终止,否则进程将不会退出。
关于CTRL+C 没有杀死我的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6971608/