殭屍進程
在創建子進程之後,父進程一直在忙,沒有時間閱讀子進程狀態,導致子進程完成自己的任務之後無法退出,一直掛機,當進程退出父進程(使用wait()系統調用)沒有沒有讀取到子進程退出的返回代碼時就會產生殭屍進程。
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進程對它們完成狀態收集工作。
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;
}