C 如何终止多个子进程
在模拟读写器问题的C程序中,我使用C 如何终止多个子进程,c,kill-process,C,Kill Process,在模拟读写器问题的C程序中,我使用fork()创建了多个子进程,每个子进程调用execlp(),并在xterm窗口中运行另一个程序(读写器) 当我结束main()时,那些在xterm中运行的子级仍然是活动的。我如何终止他们呢 下面是代码示例- main() { while(1) { scanf(choice); switch(choice) { case 1: reader() break;
fork()
创建了多个子进程,每个子进程调用execlp()
,并在xterm窗口中运行另一个程序(读写器)
当我结束main()
时,那些在xterm中运行的子级仍然是活动的。我如何终止他们呢
下面是代码示例-
main() {
while(1) {
scanf(choice);
switch(choice) {
case 1:
reader()
break;
case 2:
writer();
break;
default:
kill(getpgid(getpid()), SIGTERM); // killing the group id
return 0;
}
}
reader() {
/*
some semaphore manipulation
*/
execlp("xterm", "xterm", "-e", "./read", NULL);
/*
some semaphore manipulation
*/
return 0;
}
writer() {
/*
some semaphore manipulation
*/
execlp("xterm", "xterm", "-e", "./write", NULL);
/*
some semaphore manipulation
*/
return 0;
}
分叉后父级和子级的组id应该相同,因此发送
kill(pid,SIGTERM)代码>
应该照顾他们(其中pid是组Id)
正如caf在下面的评论中指出的,kill(0,SIGTERM)
将向当前进程的进程组发送信号如何确定组id?使用getpgid(),此处提供了更多详细信息()希望帮助SI已经完成了“kill(getpgid(getpid()),SIGTERM)”,但xterm窗口仍然打开,我仍然可以继续处理它们。您的execlp()调用是什么样子的?(一个更简单的解决方案是在父项中保留一个创建时的子ID列表,然后循环并杀死每个ID。此外,您可能希望在这里的第一个示例()中看到它如何应用于您的案例