0
我编码一个简单的Linux壳C.execvp叉:等待标准输出
有时用叉子,然后执行无阻塞命令时 - 我的下一个printf
消失。我猜这是因为子进程正在写入stdout。
如果我使用waitpid
就没有问题 - 因为我的下一个printf只会在子进程终止后打印。有时用户需要执行非阻塞命令 - 然后我不会使用waitpid
- 然后我的下一个printf
将消失。
如果我使用sleep(1)
它也解决了这个问题。但我想知道是否有一种更优雅的方式来实现这一点。
int main(int argc, char *argv[], char *env[])
{
pid_t child_pid;
int status;
if((child_pid = fork()) < 0)
{
perror("fork failure");
exit(1);
}
if(child_pid == 0)
{
printf("\nChild: I am a new-born process!\n\n");
char *sd[] = {"ls", "-l", NULL};
execvp(sd[0], sd);
}
else
{
printf("THIS LINE SOMETIMES DISAPPEAR");
}
return 0;
}