【发布时间】:2017-12-29 03:30:42
【问题描述】:
我使用fork()生成一个子进程来运行一些代码,但是我发现在子进程中,一些像下面printf("child is running");这样的代码不会运行,当我删除switch()中的句子时,它会正常运行,我不明白为什么会发生这种情况。
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;
}
}
【问题讨论】:
-
将
printf行更改为printf("child is running\n");。没有\nprintf不会立即刷新stdout,因此它看起来好像还没有被执行。否则我看不到子进程无法运行的另一个原因。您是否还检查过fork()没有返回-1? -
@Pablo 谢谢,这对我有用,你能添加一个答案,我会关闭这个问题。
标签: c linux operating-system