我正在尝试在unix中创建自己的shell。 我想通过向jobList添加PID来使子进程在后台运行。当它结束时,我希望它从jobList中删除PID。但是我不明白我怎么知道背景中的子进程何时完成?
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);
}
}
}