先决条件:C语言中的fork()
一个已经完成执行但仍在进程表中具有条目以报告给其父进程的进程称为僵尸进程。子进程始终先成为僵尸,然后再从进程表中删除。父进程读取子进程的退出状态,该子进程从进程表中获取子进程条目。
在以下代码中,子进程使用exit()系统调用完成其执行,而父进程睡眠50秒,因此不会调用wait(),并且子进程的条目仍存在于进程表中。
// A C program to demonstrate Zombie Process.
// Child becomes Zombie as parent is sleeping
// when child process exits.
#include
#include
#include
int main()
{
// Fork returns process id
// in parent process
pid_t child_pid = fork();
// Parent process
if (child_pid > 0)
sleep(50);
// Child process
else
exit(0);
return 0;
}
请注意,由于禁用fork(),以上代码可能无法与在线编译器一起使用。
其父进程不再存在(即完成或终止而不等待其子进程终止)的进程称为孤立进程。
在下面的代码中,父级完成执行并在子级进程仍在执行时退出,现在称为孤立进程。
但是,一旦其父进程死亡,孤立进程将很快被init进程采用。
// A C program to demonstrate Orphan Process.
// Parent process finishes execution while the
// child process is running. The child process
// becomes orphan.
#include
#include
#include
int main()
{
// Create a child process
int pid = fork();
if (pid > 0)
printf("in parent process");
// Note that pid is 0 in child process
// and negative if fork() fails
else if (pid == 0)
{
sleep(30);
printf("in child process");
}
return 0;
}
请注意,由于禁用fork(),以上代码可能无法与在线编译器一起使用。
有关的 :
知道操作系统中的僵尸是什么吗?
僵尸进程及其预防
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。