如何在单个程序中执行僵尸和孤儿进程?

先决条件: C语言中的僵尸进程和孤儿进程

null

僵尸程序: 僵尸进程是一个已完成执行但仍在进程表中有一个条目的进程。仍然需要此条目,以允许父进程读取其子进程的退出状态。 在父进程接受其返回代码之前,终止的进程不能离开系统。如果它的父进程已经死了,那么它已经被“init”进程采用,该进程总是接受其子进程的返回码。但是,如果进程的父进程处于活动状态,但从未执行wait(),则该进程的返回代码将永远不会被接受,并且该进程仍将是一个僵尸。

孤立进程: 孤立进程是仍在执行但其父进程已死亡的进程。它们不会变成僵尸进程;相反,它们被init(进程ID 1)采用,后者等待其子进程。 当父进程先于子进程死亡时,子进程将自动被PID为1的原始“init”进程采用。

方法: 在下面的代码中,我们做了一个场景,有一个父进程,它有一个子进程,该子进程也有一个子进程,首先,如果我们的进程进入子进程,我们将系统置于睡眠状态5秒,这样我们就可以完成父进程,使其子进程成为孤儿,然后我们将子进程作为僵尸进程,当父对象(即子对象)睡眠1秒时,子对象的子对象完成其执行,因此子对象的子对象不调用terminate,并且其条目仍存在于进程表中。

以下是上述方法的实施情况:

// C program to execute zombie and
// orphan process in a single program
#include <stdio.h>
int main()
{
int x;
x = fork();
if (x > 0)
printf ("IN PARENT PROCESSMY PROCESS ID
: %d", getpid());
else if (x == 0) {
sleep(5);
x = fork();
if (x > 0) {
printf ("IN CHILD PROCESSMY PROCESS ID :%d
PARENT PROCESS ID : %d", getpid(), getppid());
while (1)
sleep(1);
printf ("IN CHILD PROCESSMY PARENT PROCESS ID
: %d", getppid());
}
else if (x == 0)
printf ("IN CHILD'S CHILD PROCESS
MY PARENT ID : %d", getppid());
}
return 0;
}


输出: 图片[1]-如何在单个程序中执行僵尸和孤儿进程?-yiteyi-C++库 注: 由于禁用了fork(),上述代码可能无法与联机编译器一起使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享