0

我有一个fork孩子的程序。我试图捕捉以下信号SIGINTSIGPIPESIGTERM

Ctrl+上c(生成 SIGINT - afaik)我想确保在主程序终止之前杀死子进程,这是我在信号处理程序中所做的。

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

Ctrl+上c,我得到了 shell 提示,但我仍然可以在ps. 所以基本上我的主程序没有被杀死。

我的理解错了吗?

编辑 0:一项观察:在Ctrl+之前c,在ps主程序状态中说S但在+Ctrl之后。cI

4

1 回答 1

0

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

似乎您的处理程序代码执行的操作不正确,导致进程退出,请发布您的处理程序代码以及如何设置处理程序,因为可以在 SIGINT 上执行 SIGIGN(忽略),以便 CTRL+C 有效地执行对您的程序没有任何影响。

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

于 2011-08-07T08:29:21.603 回答