【发布时间】:2018-04-12 05:16:10
【问题描述】:
如何在 for 循环中杀死旧的父进程?我有以下分叉父进程
if (pid > 0){
pid_t ppid = getppid();
for (int parentid = ppid; parentid > 1; parentid++) {
parentid = ppid;
pid_t ppid = fork();
if(ppid > 1) {
execl("/usr/bin/elinks","elinks","google.com",(char *) NULL);
}
sleep(5);
}
exit(EXIT_SUCCESS);
}
我有一个子进程一直在运行
system("xdotool......")
我尝试将 kill(ppid,SIGTERM) 放在 for 循环中,但它被忽略了。只有将它放在循环之后才会发出终止信号,然后整个程序就会退出。父分叉不断堆积并消耗内存,因此我有必要在创建新父级时杀死旧父级。
【问题讨论】:
-
1) 让您的父母
exec而不是孩子似乎很奇怪。 2)kill不足;您需要使用wait家族中的某些东西来获取已终止的进程,否则它们会像僵尸一样继续存在。 -
我尝试在父子节点上都使用 execl,但是让子节点循环很困难,所以我最终在 while(1) 循环中使用了 system()。我会调查等待电话,谢谢
-
目前还不清楚您到底要做什么。首先,你不分叉父母。正常的范例是孩子的'fork
/(child)exec, and as @StephenNewell said,wait`。杀死父母是违反直觉的。