Unix上的C fork函数奇怪的行为(HP-UX)

时间:2011-06-03 16:38:18

标签: c fork

我在C程序上有经典的fork代码,如下所示:

int status;


if((pid = fork()) < 0)
{
 printf("SOME fork() ERROR...\n");
}
else if(pid == 0)
{
 //Child stuff
 printf("CHILD CODE\n");
}
else
{
 //parent stuff
 printf("PARENT CODE\n");
 while (wait(&status) != pid);

}

它编译好了,我正在运行它来做一些测试,直到我不明白的事情发生: 突然在终端我只看到写着“父母代码”。据我所知,如果没有创建子进程“SOME fork()ERROR ...”和“PARENT CODE”是必须在屏幕上显示的内容。 (这是真的吗?)但只有最后一个出现。我的第一个想法是mmmm ......叉子成功了但是......孩子没有执行它的代码??????????这甚至可能吗?

谢谢你的时间和帮助。

编辑:变量状态和等待(...)在程序上,我只打印消息以尝试以更简单的方式查看正在发生的事情。

这是HP-UX 11

感谢大家的回答。

4 个答案:

答案 0 :(得分:3)

pid如何宣布?

它是否可能是无符号类型(而不是使用应该签名的类型pid_t)?如果是这种情况,将不会检测到fork()的错误返回。

答案 1 :(得分:0)

也许你没有给孩子足够的时间。尝试在父代码中添加waitpid()调用。

答案 2 :(得分:0)

尝试在fflush(stdout)之后添加printf

答案 3 :(得分:0)

代码中有一些奇怪的东西:子进程没有退出。

else if(pid == 0)
{
    //Child stuff
    printf("CHILD CODE\n");
    _exit(EXIT_SUCCESS);
}

也许这解决了这个问题。