C noob在这里。代码应该打印" C1:执行ls命令"以及执行ls -la
命令的输出。但我也没有看到。循环中和循环之前的其他打印语句的输出工作正常。
pid_t child1_pid = print_if_err(fork(), "fork");
if (child1_pid == 0) {
printf("\nChild Process 1\n");
printf("Process ID: %d\n", getpid());
printf("Parent Process ID: %d\n", getppid());
sleep(2);
int whale = 6;
char new_whale[50];
sprintf(new_whale, "%d", whale);
setenv("WHALE", new_whale, 1);
printf("C1: %d\n", whale);
while(whale > 3) {
sleep(3);
whale = whale - 3;
sprintf(new_whale, "%d", whale);
setenv("WHALE", new_whale, 1);
printf("C1: %d\n", whale);
}
print_if_err(chdir("/"), "chdir");
printf("C1: executing ls command");
execl("ls", "-l", "-a", NULL);
_exit(0);
}
答案 0 :(得分:1)
执行execl之前,可能没有刷新stdout和stderr。在execl。
之前尝试fflush(stdout)和fflush(stderr)这种行为的原因是打印速度很慢,而printf()实际打印到缓冲区,后来一起刷新。