无法创建僵尸进程

时间:2016-08-07 15:30:16

标签: c windows process zombie-process

enter image description here

我正在尝试用C创建一个僵尸进程:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>

void main()
{
        int pid;
        pid=fork(); /* Duplicate */
        if (pid!=0) /* Branch based on return value from fork() */
        {
                while (1) /* never terminate, and never execute a wait()*/
                sleep(1000);
        }
        else
        {
                exit(42); /* Exit with a silly number */
        }
}

问题是我只知道如何检查僵尸进程是否只存在于bash中。所以我在Windows 10中使用了Windows上的Bash功能。我为上面的代码创建了一个可执行文件并在后台运行它并检查了僵尸进程但是找不到它。我在Ubuntu运行的PC上重复了相同的步骤并且它工作正常。我做错了什么?

1 个答案:

答案 0 :(得分:-2)

Windows没有僵尸进程。

Zombies是Unix进程模型的一个特性 - 当一个进程退出时(在UNIX中),它的退出状态不会在任何地方发送。相反,它只是坐着,直到其他进程查询退出状态。僵尸进程状态允许这样做 - 在进程退出后,它仍然是一个僵尸,直到有人(任何人)查询其退出状态。

在Windows上,另一方面,当使用CreateProcess创建进程时,您可以指定退出时退出状态信息的发送位置(通常返回其父级,但可能位于其他位置)。因此,当进程退出时,数据会立即发送到那里,而不会在任何地方进行干预。没有其他进程可以查询退出状态。

如果你在Windows上使用UNIX模拟器(例如cygwin),那么你可能会得到一个表单的僵尸 - 通常模拟器将有一个数据结构在某处跟踪额外的UNIX样式的进程信息,并且该数据结构将可能包含一个保持退出状态的地方,可以在流程退出后查询,就像僵尸一样。

相关问题