如何在这个fork()和exec()?
问题描述:
我正在写我自己的shell,但没有fork给我的child_pid = 0 ... 有什么不对?如何在这个fork()和exec()?
while(true)
{
read_command(command);
if ((child_pid = fork()) == -1)
{
fprintf(stderr, "can't fork\n");
exit(1);
}
else if (child_pid == 0) //child
{
status=execl("./myShell" command);
}
else
{
wait(status); //parent
}
}
答
我猜测,(child_pid == -1)
没有进入......是爸爸(else
)分行签订两次后(通过程序)还是什么?
无论如何,我无法看到该代码段中的错误。如果你确定你的执行流程到达那里,并且由于一个错误而具有不可预知的行为。
我怀疑glibc在你的系统上被窃听:我最好的猜测是你的程序有一个破坏了的指针,它打破了一切。这是这种真正奇怪的行为最常见的原因。
答
您的代码是确定的。在if(child_pid == 0)
中添加调试打印并确保它未被调用。如果fork
无法创建子项,则会设置errno
以指示发生错误。
你怎么知道这个? – 2010-11-14 18:03:22
我不明白你的问题 – DerekFisher 2010-11-14 18:11:38
他的意思是:你怎么知道'child_pid'永远不是0?你尝试打印吗? – casablanca 2010-11-14 18:14:26