CTRL+C 没有杀死我的程序

标签 c unix signal-handling

我有一个fork子程序。 我正在 try catch 以下信号:SIGINTSIGPIPESIGTERM

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/

相关文章:

c - 如何用 C 语言读取文本文件中的字母?

c - 如何在 C 中正确地重新分配二维数组?

C - 使用系统调用打开文件后是否需要关闭文件

Python - 降低 niceness 值

sorting - 从终端/Unix 中查找数据列中的唯一元素

c++ - C/C++ - 共享内存中的环形缓冲区(POSIX 兼容)

c - printf ("%d\n", 4294967296);犯了一些奇怪的错误

fork 后调用信号

c - C中的进程同步

为单个线程创建信号处理程序