C我怎么知道后台的子进程何时结束?

时间:2014-05-05 08:41:20

标签: process background wait pid

我正在尝试在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);



                }
            }
        }

0 个答案:

没有答案
相关问题