如何在这个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 
     } 
    } 
+1

你怎么知道这个? – 2010-11-14 18:03:22

+0

我不明白你的问题 – DerekFisher 2010-11-14 18:11:38

+0

他的意思是:你怎么知道'child_pid'永远不是0?你尝试打印吗? – casablanca 2010-11-14 18:14:26

我猜测,(child_pid == -1)没有进入......是爸爸(else)分行签订两次后(通过程序)还是什么?

无论如何,我无法看到该代码段中的错误。如果你确定你的执行流程到达那里,并且由于一个错误而具有不可预知的行为。

我怀疑glibc在你的系统上被窃听:我最好的猜测是你的程序有一个破坏了的指针,它打破了一切。这是这种真正奇怪的行为最常见的原因。

您的代码是确定的。在if(child_pid == 0)中添加调试打印并确保它未被调用。如果fork无法创建子项,则会设置errno以指示发生错误。