我在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
感谢大家的回答。
答案 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);
}
也许这解决了这个问题。