在模拟读写器问题的C程序中,我使用fork()
创建了多个子进程,并且每个子进程都调用execlp()
并在 xterm <中运行另一个程序(读取器或编写器) / strong>窗口。
当我结束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;
}
答案 0 :(得分:0)
父母和子女的群组ID在分叉后应该相同,因此发送kill(pid,SIGTERM);
应该照顾它们(其中pid是组ID)
kill(0, SIGTERM)
会将信号发送给当前流程的流程组