linux下的進程(2)

linux下的wait()函數linux

孤兒進程
孤兒進程是父進程結束,還存在子進程沒有結束,那麼這個子進程則成爲孤兒進程,孤兒進程自動將init進程做爲本身的父進程。函數

殭屍進程
子進程終止時,它與父進程之間的關係還會保存,直到父進程也正常調用wait()函數才結束。當父進程沒有調用wait或waitpid函數時獲取子進程的狀態信息,那麼子進程的進程描述符依然保存在系統中。這種進程成爲殭屍進程。spa

下面是wait()函數和waitpid()函數的原型code

pid_t wait(int *statloc);
pid_t waitpid(pid_t pid, int *statloc,int options);

當執行成功的時候,返回進程ID。進程

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>   
#include <unistd.h>

int main(void)
{
    pid_t pid,childpid;
    
    if ((pid = fork()) > 0){
        printf("that is parent\n");
        if((childpid=wait(&status))>0)
            printf("child is finished \n");
        for(int i=0;i<3;i++)
            printf("%d \n",i);
    }
    else if (pid == 0) {
        printf("that is child \n");
        for(int i=0;i<3;i++)
            printf("%d \n",i);    
    }
    else {
        printf("error");
    }
    exit(0);
}

下面的是結果
圖片描述圖片

從結果能夠看出在子進程終止前,wait使其調用者阻塞。而waitpid()函數則是能夠等待某一個特定的進進程,而且它有若干個選項,能夠控制它所等待的進程。原型

相關文章
相關標籤/搜索