孤儿进程就是 被父进程 抛弃了子进程就出门了 这是子进程就是孤儿进程 最后会人收养它 那就是
养父进程 并且类型就是int的 就是int 进程
必须是父进程才能抛弃子进程 也就是 释放子进程控制块 的意思
父进程抛弃完之后 空间就更多了 也就是进程结束之后 能够释放用户空间的意思
#include
#include
#include
#include
int main()
{
pid_t a;
a=fork();
if(a>0)
{
printf("father pid is %d\n",getpid());
}
else if(a==0)
{
sleep(2);
printf("child pid is %d ppid is %d \n",getpid(),getppid());
}
return 0;
}
因为父进程是从main开始执行的 所以到了子进程的if判断while sleep(2); 睡眠 2ms
相当于挂起了 退出了
其实 father pid 是main进程的身份
child ppid 才是真实的父进程的身份
所以查父进程变化 信息 是 1 1 0 9 6 5
指令 ps aux | grep 1 1 0 9 6 5
为什么父进程对应不上呢
先查看他的 pid 对应了什么任务
systemd 是int类型的 也就是养父进程
养父进程收养了子进程
父进程一直在工作 却不知道子进程的信息 这时子进程就变僵尸进程了
退出了工作 父进程只能收僵尸的信息了
#include
#include
#include
#include
int main()
{
pid_t a;
a=fork();
if(a>0)
{
while(1){
printf("father pid is %d\n",getpid());
sleep(2);
}
}
else if(a==0)
{
printf("child pid is %d ppid is %d \n",getpid(),getppid());
}
return 0;
}
defunct :僵尸进程 和对应的二进制文件
如果杀死 会不会存在
注意不是杀死子进程 而是杀死了父进程 才能让僵尸进程不存在
因为父进程是主导的 子进程是被动的
其实产生僵尸进程 杀死不杀死 都是一个没有生命周期的进程