gpt4 book ai didi

使用 kill 函数创建僵尸进程

转载 作者:IT王子 更新时间:2023-10-29 01:25:59 26 4
gpt4 key购买 nike

我正在尝试使用 kill 函数创建一个僵尸进程,但它只会杀死子进程并返回 0

int main ()
{
pid_t child_pid;

child_pid = fork ();

if (child_pid > 0) {
kill(getpid(),SIGKILL);
}
else {
exit (0);
}

return 0;
}

当我检查进程的状态时,状态列中没有 z

最佳答案

这里有一个简单的方法可以创建一个僵尸:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int main()
{
int pid = fork();
if(pid == 0) {
/* child */
while(1) pause();
} else {
/* parent */
sleep(1);
kill(pid, SIGKILL);
printf("pid %d should be a zombie\n", pid);
while(1) pause();
}
}

关键是父程序——即这个程序——保持运行但对垂死的 child 执行wait()

僵尸是没有被等待的死去的 child 。如果这个程序等待它死去的 child ,它就会消失而不是僵尸。如果这个程序退出,僵尸 child 将被其他人继承(可能是 init),这可能会等待,并且 child 会离开而不是僵尸。

据我所知,僵尸的全部原因是死去的 child 以退出状态退出,这可能是某些人想要的。但是 Unix 存储退出状态的地方是死进程的空壳,你如何获取一个死 child 的退出状态是等待它。所以 Unix 保留僵尸只是为了保持它的退出状态,以防万一 parent 想要它但还没有开始调用 wait

所以这实际上有点诗意:这里的 Unix 哲学基本上是任何 child 的死亡都不应被忽视。

关于使用 kill 函数创建僵尸进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com