我不知道这是否是最好的方法,但我有一个随机数量的子进程已经执行,并希望实现一种方法来杀死他们不使用ctrl+c。我在考虑保留一组它们的pid,然后在我想从父进程中杀死它们时检查该集合。
我的方法是这样的
set<pid_t> pids;
pid_t id = fork();
if(id == 0)
{
pids.insert(getpid());
execlp("./somewhere", "./somewhere", something.c_str(), NULL);
cout << "Didn't exec" << endl;
exit(0);
}
for(auto i : pids)
{
kill(i, something?)
}
我仍然不太知道如何使用kill函数或pid是如何工作的,所以我不知道这是否会以任何方式工作,我只是在大学里用c做了一个简单的项目,尽管我可以尝试用c++做一些更复杂的东西。无论如何,这样做的目的是能够让父进程在未定义数量的运行子进程中杀死单个子进程,或者在用户写入quit
时杀死所有子进程。kill()
on pid 0向调用进程组的所有成员发送信号:
如果pid为0,则向所有进程(不包括an进程)发送签名进程组ID相等的未指定的系统进程集到发送方的进程组ID,并且该进程具有发送信号的权限。
如果您想仅kill
某些进程(似乎是您的情况),请查看使用setpgid()分组子进程