如何在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......")
我尝试在for循环中放置kill(ppid,SIGTERM),但它被忽略了。只有在循环之后放置它才能执行kill信号,但随后整个程序退出。父叉子不断堆叠并消耗ram,因此在创建新父节点时我必须杀死旧父节点。
答案 0 :(得分:1)
您还需要确保适合您的终止条件 for loop:
pid_t ppid = getppid();
for (int parentid = ppid; parentid > 1; parentid++) {
parentid = ppid;
pid_t ppid = fork();
你确定你的for循环结束了吗?
如果parentid总是大于1,因为fork()成功了,
循环终止了吗?
fork函数返回0到子进程,子进程的PID返回父进程。
因此,您可以使用此代码来确定是否 正在执行的代码是子代或父代:
pid_t pid = fork();
if (pid == 0)
{
/* At this point, the code that is executing is the child */
}
else if (pid > 0)
{
/* At this point, the code that is executing is the parent */
}
else
{
/* The fork function call failed */
}
您的代码需要区分孩子和孩子 父母;你可以在块中使用退出系统调用 以上代码为父母。