我有一个问题。我有一个函数A,我做了一个fork然后我想在完成一些指令或用户请求后杀死该fork。 像这样:
int main{
bool child_started =false;
pid_t child_pid;
while bool{
//request user to make input
//users makes a input.
if(input == 1){
functionA();
}else if(input == 2 && child_started){
//kill child
//I tried kill(child_pid,SIGKILL); but it doesnt work
}
和功能A
void functionA(){
child_pid= fork();
if(child_pid == 0){
child_started = true;
//instructions
exit(0); //I tried this but i get a zombie process
child_started = false;
}else if (child_pid<0){
//error handling
}
}
有什么想法吗?我尝试了许多方法,但没有成功。
感谢
在functionA()
上exit()
之前的说明非常耗时。我们假设这些指令需要10分钟才能执行。我的观点是在他们之后自动杀死子进程,这就是exit()
存在的原因。
在主要方面,用户可以决定在输入2的那些10分钟之前杀死孩子。
------------------------------解决---------------- ------------------------
如果有人遇到同样的问题。不要浪费你的时间阅读非贡献的答案。我解决了在父亲遇害后添加wait()
的问题。
答案 0 :(得分:0)
fork()为子进程返回0,为父进程返回非零。在创建它之后,你立即从子进程终止(exit()终止进程它不是返回)。当用户尝试使用命令kill时如果孩子已经完成了执行,那么杀死就不会在这里工作。