繁体   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