殭屍進程和孤兒進程

殭屍進程

在創建子進程之後,父進程一直在忙,沒有時間閱讀子進程狀態,導致子進程完成自己的任務之後無法退出,一直掛機,當進程退出父進程(使用wait()系統調用)沒有沒有讀取到子進程退出的返回代碼時就會產生殭屍進程。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main()
{
    size_t pid = getpid();
    size_t id = fork();
    if(id<0)
    {
        printf("fork error,return code is:%d\n", errno);
        return 2;
    }
    else if(0 == id)
    {
        printf("child pid is:%d\n", getpid());
        exit(3);
    }
    else
    {
        printf("father pid is:%d return pid is:%d\n", getpid(), id);
        sleep(1);

    }
    return 0;
}

這裏寫圖片描述

孤兒進程

一個父進程退出,而它的一個或多個子進程還在運行,那麼那些子進程將成爲孤兒進程。孤兒進程將被init進程(進程號爲1)所收養,並由init進程對它們完成狀態收集工作。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main()
{
    size_t id = fork();
    if(id<0)
    {
        printf("fork error");
    }
    else if(0 == id)
    {
        while(1)
        {
           printf("child pid is:%d parent pid is:%d\n", getpid(), getppid);
           sleep(3);
        }
    }
    else
    {
        printf("father pid is:%d child pid is:%d\n", getppid(), getpid());
        exit(1);
    }
    return 0;
}

這裏寫圖片描述

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