1.孤儿进程:没有父进程,pid值被1接收
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
//创建一个进程
pid_t pid=fork();
if(pid>0){
//父进程
printf("this is parent:%d child:%d\n",getpid(),pid);
}else if(pid==0){
//子进程
printf("this is child ppid:%d pid:%d\n",getppid(),getpid());
}
return 0;
}
显示如图:
原本子进程的父进程的PID号变为1
2.僵尸进程:实际存在,但不再对程序运行起作用
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
int main(int argc, const char *argv[])
{
pid_t pid=fork();
if(pid<0){
perror("fork");
return -1;
}
if(pid>0){
while(1){
printf("parent:%d child:%d\n",getpid(),pid);
sleep(1);
}
}else if(pid==0){
int i=0;
while(1){
//子进程
if(i>2){
printf("this is child ppid:%d child:%d\n",getppid(),getpid());
printf("子进程即将退出\n");
_exit(0);
}
i++;
}
printf("子进程退出\n");
}
return 0;
}
a.out程序中部分程序成为Z状态。