杀死父进程时终止所有子进程
Kill all the child processes when parent is killed
我在LINUX下运行一个C++程序。
从我的程序代码中,我正在调用另一个程序,system()
调用:
system("calledProgram opt1 opt2 ... opt_n");
但是这个calledProgram
运行多个进程(具有特定名称,例如p1
、p2
、p3
、p4
)。
当我的程序被用户外部杀死时,如何找到并终止这些进程。
这里(如何在 c++ 中杀死进程,只知道其名称的一部分)描述了如何查找具有特定名称的进程并杀死它们。
但是,如果用户使用来自不同目录的相同选项运行程序怎么办。我是否也应该检查正在运行的目录以找到正确的进程?
有没有另一种(更好的)方法来杀死这些子进程?
PS:当我从cmd行运行calledProgram
,然后通过ctrl + c杀死它时,它的进程不会自动终止。
我建议你使用fork/exec而不是system()
来调用你的新程序。这很容易。看到这里。
对于您的应用程序来说,这似乎是必要的,因为您需要"calledProgram"作为程序的子级,因此当有人杀死您的程序时它会死亡。
您还需要处理 SIGINT 信号。以最简单的方式,您需要这样的东西:
#include<signal.h>
void signal_handler()
{
kill(0,SIGTERM);
}
int main()
{
signal(SIGINT,signal_handler);
}
终止进程时,将杀死所有子进程。对于尚未分离的子进程,情况也是如此。
你的进程只需要记住它最近的孩子的pid并杀死他们。子进程将自动死亡。
如果将所有子进程放在同一个进程组中,则只需一次 kill(2) 调用即可终止所有子进程。
详见:人2杀
相关文章:
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 检测到由于操作系统内存不足而导致子进程终止
- 使用信号检测子进程何时终止的最佳方法是什么?
- 无法检测子进程是否已终止
- 我无法使用终止进程杀死子进程
- 子进程在 fork 中 3 秒后自行终止
- 截获非终止子进程C++的stdout
- 当父NT服务被终止/崩溃时,终止子进程
- Fork进程:在子进程终止时恢复父进程(Linux)
- 在所有子进程终止后,不能运行父进程
- Dup2()导致子进程提前终止
- 从Python子进程终止时的c++调用函数
- CreateProcess,使子进程在父进程被终止时被终止
- 何时应该终止MPI子进程
- 杀死父进程时终止所有子进程