fork()生成的子进程中的部分代码被跳过

时间:2017-12-29 03:30:42

标签: c linux operating-system

我使用fork()生成子进程来运行一些代码,但我发现在子进程中,下面的printf("child is running");之类的代码将无法运行,当我删除switch()中的句子时{1}},它会正确运行,我无法理解为什么会发生这种情况。

pid_t pid = fork();
if(pid == 0){
        int execl_status = -1;
        printf("child is running");  // this will not run

        switch(cmdIndex)
        {
            case CMD_1:
                execl_status = execl("./cmd1","cmd1",NULL);
                break;
            case CMD_2:
                execl_status = execl("./cmd2","cmd2",NULL);
                break;
            case CMD_3:
                execl_status = execl("./cmd3","cmd3",NULL);
                break;
            default:
                printf("Invalid Command\n");
                break;
        }
}

1 个答案:

答案 0 :(得分:1)

就像我在评论中所说,将您的printf行改为

printf("child is running\n");

如果您未在格式字符串的末尾使用\n,则printf通常不会立即刷新stdout,因此看起来好像似乎什么都没有被执行。

如果您不想打印换行符(无论出于何种原因),您也可以自己刷新stdout

printf("child is running");
fflush(stdout);

我认为没有其他理由说明为什么它似乎没有运行。另外,请不要忘记检查fork()是否返回-1,也许您的用户帐户已达到分叉流程的限制。