aka*_*man 1 c unix fork zombie-process
我是UNIX编程的新手,我正在阅读僵尸进程以及如何使用fork()两次避免它们.我从一本书中读取代码并试图在我的系统上运行它..我正在使用ubuntu 12.04.我运行了以下代码:
#include<stdio.h>
#include<sys/wait.h>
#include<stdlib.h>
int main()
{
pid_t pid;
if(pid = fork() < 0)
printf("Fork Error.!!!\n");
else
if(pid == 0)
{
if((pid = fork()) < 0)
printf("Fork2 Error.!!!\n");
else
if(pid > 0)
exit(0);
sleep(2);
printf("Second Child, parent id: %d\n", getppid());
exit(0);
}
if(waitpid(pid, NULL, 0) != pid)
printf("Waitpid Error.!!!\n");
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出如下:
Second Child, parent id: 1
Second Child, parent id: 1
Run Code Online (Sandbox Code Playgroud)
这本书说这应该只打印一次,这也是我觉得当我看到代码中发生了什么时应该发生的事情.我不明白为什么它会被打印两次.我在网上的许多地方发现了这个代码,但无法解释这个问题.欢迎任何帮助.谢谢.!!
小智 5
主要代码的第二行 - 缺少括号 pid = fork()
if( ( pid = fork() ) < 0){
Run Code Online (Sandbox Code Playgroud)
在这一行:
if(pid = fork() < 0)
Run Code Online (Sandbox Code Playgroud)
你应该在pid = fork()部件周围添加括号,就像你为另一个fork做的那样.您正在分配的结果fork() < 0来pid.只要fork没有失败,这意味着pid在第一个fork的父级和子级中都变为0,所以你得到2个运行子分支的进程(每个进程创建一个自己的子进程)并且没有跑了waitpid.
| 归档时间: |
|
| 查看次数: |
897 次 |
| 最近记录: |