等待進程

#include
#include
#include
#include
#include
int main()
{
    pid_t pid;
    char *message;
    int n;
    int exit_code;

    printf("fork program starting\n");
    pid = fork();
    switch(pid) 
    {
    case -1:
        exit(1);
    case 0:
        message = "This is the child";
        n = 5;
        exit_code = 37;
        break;
    default:
        message = "This is the parent";
        n = 3;
        exit_code = 0;
        break;
    }

    for(; n > 0; n--) {
        puts(message);
        sleep(1);
    }


    if(pid) {
        int stat_val;
        pid_t child_pid;

        child_pid = wait(&stat_val); //系統調用返回子進程PID
//並將狀態信息填入stat_val中
        printf("Child has finished: PID = %d\n", child_pid);
        if(WIFEXITED(stat_val))
            printf("Child exited with code %d\n", WEXITSTATUS(stat_val));
        else
            printf("Child terminated abnormally\n");
    }
    exit (exit_code);
}

1、這裏要注意的是pid_t定義的pid和進程真正的pid,前者是fork函數返回的值,父進程返回新的pid,而子進程返回0,用getpid()就可以看到他們的真實pid。
2、wait系統調用將暫停父進程直到他的子進程結束爲止,這個調用返回子進程的PID。狀態信息允許父進程瞭解子進程的退出狀態,即子進程的main函數返回的值或子進程中exit函數的退出碼。
3、wait函數的原型pid_t wait(int *stat_loc);如果stat不是空指針,,就會將子進程的狀態信息寫入其中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章