我在LINUX下运行C ++程序
从我的程序代码中,我通过while IFS='' read -r line; do
expr ${line//,/ + }
done
电话呼叫另一个程序:
system()
但此system("calledProgram opt1 opt2 ... opt_n");
运行多个流程(具有特定名称,例如calledProgram
,p1
,p2
,p3
)。
当我的程序被用户外部杀死时,如何找到并终止这些进程。
这里(How to kill process in c++, knowing only part of its name)描述了如何查找具有特定名称的进程并将其终止 但是如果用户使用来自不同目录的相同选项运行程序会怎样。我是否应该检查正在运行的目录以找到正确的进程?
还有另一种(更好的)杀死这些子进程的方法吗?
PS:当我从cmd行运行p4
,然后通过ctrl + c查杀它时,其进程不会自动被杀死。
答案 0 :(得分:3)
我建议您使用fork / exec而不是system()
来调用您的新程序。这很简单。请this。
您的应用程序似乎有必要,因为您需要“calledProgram”才能成为您程序的孩子,所以当有人杀死您的程序时它会死亡。
您还需要处理SIGINT信号。用最简单的方法你需要这样的东西:
#include<signal.h>
void signal_handler()
{
kill(0,SIGTERM);
}
int main()
{
signal(SIGINT,signal_handler);
}
答案 1 :(得分:2)
杀死进程时,所有子进程都被终止。 这对于未分离的子进程是正确的。
你的过程只需要记住它最近的孩子的pid并杀死他们。儿童的子进程将自动死亡。
如果您将所有子进程放在同一进程组中,则可以使用单个kill(2)调用终止所有进程。
参见:man 2 kill