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()函數則是能夠等待某一個特定的進進程,而且它有若干個選項,能夠控制它所等待的進程。原型