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;
}