#include
#include
#include
int main()
{
pid_t pid = fork();
if(pid < 0)
{
perror("fork");
return 1;
}
else if(pid > 0)
{
printf("parent : %d
", getpid());
sleep(30);
}
else
{
printf("child : %d
",getpid());
sleep(5);
}
}
僵尸进程的危害:
1.进程的退出状态必须被维持下去,因为他要关心他的进程(父进程),父进程如果一直不读取,那子进程一直处于Z状态
2.维护退出状态本身就是要用数据维护,也属于进程的基本信息,所以保存在task_struct中,换句话说,Z状态一直不退出,PCB就要
一直维护
3.父进程创建了很多子进程,就是不回收,就会造成内存资源的浪费,因为数据结构对象本身就要占用内存。
4.内存泄露
孤儿进程
父进程先退出,子进程就称之为“孤儿进程”
孤儿进程被1号init进程领养,当然要由init进程回收
使用代码模拟实现孤儿进程
代码实现
#include
#include
#include int main()
{
pid_t id = fork();
if(id<0)
{
perror("fork");
return 1;
}
else if(id==0)
{
printf("child:%d
",getpid());
sleep(10);
}
else
{
printf("parent:%d
",getpid());
sleep(3);
exit(0);
}
return 0;
}