Process 我如何知道后台的子进程何时结束?
我正在尝试在unix中创建自己的shell。 我想让子进程在后台运行,并将PID添加到作业列表中。当它结束时,我希望它从作业列表中删除PID。但我不明白我该如何知道后台的子进程何时结束Process 我如何知道后台的子进程何时结束?,process,background,wait,pid,Process,Background,Wait,Pid,我正在尝试在unix中创建自己的shell。 我想让子进程在后台运行,并将PID添加到作业列表中。当它结束时,我希望它从作业列表中删除PID。但我不明白我该如何知道后台的子进程何时结束 int childPid,endPid; if(addJob(jobs,childPid = fork(),0,"fork()") >= 0){ if(childPid == 0){ printf("Child Proc
int childPid,endPid;
if(addJob(jobs,childPid = fork(),0,"fork()") >= 0){
if(childPid == 0){
printf("Child Process Running...\n");
execl("/bin/sleep","sleep","5",(char*) 0);
deleteJob(jobs,childPid);
exit(0);
}
else if(childPid > 0){
if(!info->bg){
int count=1;
//waitpid(childPid,NULL,0);
while(endPid!=childPid){
sleep(1);
endPid=waitpid(childPid,NULL,WNOHANG);
//printf("%d:%d\n",endPid,childPid);
printf("%d\n",count++);
}
printf("child process ended.\n");
deleteJob(jobs,childPid);
}
else{
printf("child process runs in background.. \n");
//sleep(1);
}
}
}
当子进程更改状态时,使用wait()函数的一个变体来接收和处理信号:那么,当wait()检查子进程以更改其状态时,如何返回提示?你的意思是我应该定义SIG吗?是的,你需要为SIGCHLD定义一个信号处理程序。在该信号处理程序中,您可以调用wait()的一个变体。谢谢!我会试试看它是否有效。