我需要创建n来自同一父母的孩子,并让他们运行,同时父母无限地询问要发送给某个孩子的信号。我让父母创建那些儿童,但他们完成了执行,所以我让他们进入一段时间(1)循环。问题是,当我试图杀死任何一个孩子时,它变成了一个僵尸进程,而不是实际终止它的执行。我猜这是因为父母仍在等待孩子终止执行,他们不会发送退出状态。所以...首先,我真的需要让孩子进入一个无限的while循环,让他们在父母询问信号时运行吗?如果我这样做,我该如何避免这种“永不终止执行”的问题?我需要找到一种让孩子们退出while循环的方式,并发送实际的“完成执行”信号,因为我认为我不能使用wait()
,因为孩子们从未真正完成跑步,他们只是由父母终止。使用fork()创建“后台运行”的孩子并用信号杀死他们每个人
谢谢。 PS:在Linux中运行。这是我的代码
int main(){
int i;
pid_t parent = getpid();
pid_t pid[4];
printf("parent with pid %d\n", parent);
for(i = 0; i < 5; i++){
pid[i] = fork();
if(pid[i] < 0){
perror("Error in fork.");
exit(1);
} else if(pid[i] == 0 && getppid() == padre) {
printf("Number: %d pid %d, parent: %d\n", i, getpid(), getppid());
while(1);
}
}
if(getpid() == padre){
while(1){
printf("Enter pid and signal:\n");
int x, y;
scanf("%d", &x); // pid
scanf("%d", &y); // signal
printf("you did: kill(%d, %d)\n", x, y);
kill(x, y);
}
}
return 0;
}
编辑: 最终代码的答案来实现:https://github.com/sebasura/sistope
读取有关['wait'](http://man7.org/linux/man-pages/man2/wait.2.html)系统调用,并且它兄妹。 –
杀死后的'waitpid()'调用将是一个好的开始。 – mshildt
而不是'while(1);',你可能更喜欢'暂停()'。 –