簡體   English   中英

如何在此分支中fork()和exec()?

[英]How to fork() and exec() in this one?

我正在編寫自己的shell,但是沒有fork提供我的child_pid = 0 ...那里怎么了?

 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為指示發生了錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM