我使用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;
}
}
答案 0 :(得分:1)
就像我在评论中所说,将您的printf
行改为
printf("child is running\n");
如果您未在格式字符串的末尾使用\n
,则printf
通常不会立即刷新stdout
,因此看起来好像似乎什么都没有被执行。
如果您不想打印换行符(无论出于何种原因),您也可以自己刷新stdout
:
printf("child is running");
fflush(stdout);
我认为没有其他理由说明为什么它似乎没有运行。另外,请不要忘记检查fork()
是否返回-1
,也许您的用户帐户已达到分叉流程的限制。