Process 我如何知道后台的子进程何时结束?

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

我正在尝试在unix中创建自己的shell。 我想让子进程在后台运行,并将PID添加到作业列表中。当它结束时,我希望它从作业列表中删除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);



                }
            }
        }

当子进程更改状态时,使用wait()函数的一个变体来接收和处理信号:那么,当wait()检查子进程以更改其状态时,如何返回提示?你的意思是我应该定义SIG吗?是的,你需要为SIGCHLD定义一个信号处理程序。在该信号处理程序中,您可以调用wait()的一个变体。谢谢!我会试试看它是否有效。