我的任务是创建僵尸进程。我的代码是这样的:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
printf("errorn");
}
else if (pid == 0) {
printf("Child %dn", getpid());
printf("Parents %dn", getppid());
printf("Waiting for my Child to completen");
exit(0);
}
else {
sleep(5);
printf("Parent %dn",getpid());
}
return 0;
}
当我执行gcc
并使用./a.out
执行文件时,我得到以下输出:
Child 25097
Parents 25096
等待我的孩子完成
Parent 25096(几秒钟后)
我的任务是创建一个僵尸进程,并在父进程中打印出子进程的退出状态。每件事都让我有点困惑,因为这是我第一次使用Linux和c。
你对我解决这个任务有什么建议吗?因为我不确定是否一切都是对的。我也试着玩wait()
,waitpid()
和WEXITSSTATUS()
,但我不确定。我使用ps x
命令检查是否有不同的输出,但我没有注意到任何变化。
Thanks in advance:)
这段代码将成功创建一个僵尸进程。
调用fork
后,子进程打印几行并退出,而父进程休眠5秒。这意味着当父进程处于睡眠状态时,您将有一个大约5秒钟的僵尸进程。
当sleep结束时,父进程打印一些内容并退出。一旦父进程退出,子进程将被init进程继承,它将为子进程设置wait
,并使它的pid从pid列表中消失。
您也可以在父进程中使用wait
,在这种情况下,在父进程调用wait
之前,子进程是一个僵尸进程。