2010-11-14 60 views
0

我正在寫我自己的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

回答

0

我猜測,(child_pid == -1)沒有進入......是爸爸(else)分行簽訂兩次後(通過程序)還是什麼?

無論如何,我無法看到該代碼段中的錯誤。如果你確定你的執行流程到達那裏,並且由於一個錯誤而具有不可預知的行爲。

我懷疑glibc在你的系統上被竊聽:我最好的猜測是你的程序有一個破壞了的指針,它打破了一切。這是這種真正奇怪的行爲最常見的原因。

0

您的代碼是確定的。在if(child_pid == 0)中添加調試打印並確保它未被調用。如果fork無法創建子項,則會設置errno以指示發生錯誤。