孤儿进程(orphan)父进程pid为1
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(int argc, const char *argv[])
{//孤儿进程--无父进程,
pid_t pid=fork();
if(pid>0)//父
while(1)
{
printf("parent pid:%d,child:%d\n",getpid(),pid);
sleep(1);
exit(0);
}
else if(pid==0)
{
while(1)
{
printf("child pid:%d\tppid:%d\n",getpid(),getppid());
sleep(1);
}
}
else{
perror("fort");
return -1;
}
return 0;
}
僵尸进程(zombie)--退出子进程,不回收子进程。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
if(pid>0)//夫
{
/* int wstatus=0;
pid_t cpid=wait(&wstatus);
if(WIFEXITED(wstatus))printf("cpid=%d正常退出\n",cpid);
else printf("cpid=%d异常退出\n",cpid);*/
while(1)
{
printf("parent pid:%d,child:%d\n",getpid(),pid);
sleep(1);
}
}
else if(pid==0)
{
for(int i=0;i<2;i++)
{
printf("child pid:%d\tppid:%d\n",getpid(),getppid());
if(i==2)
{
printf("退出子进程\n");
exit(0);
}
}
}
else{
perror("fort");
return -1;
}
return 0;
}