Я пытаюсь запустить команду в дочернем процессе в C:
int main()
{
if (fork()) {
wait(0);
} else {
fflush(stdout);
execlp("ls", "ls");
printf("Command not found: \"%s\"\n", "ls");
}
}
Насколько я понимаю, вызов fork()
создаст клон процесса (дочерний) , Родитель здесь будет wait(0)
, потому что fork()
не возвращает ноль и ждет завершения дочернего процесса.
Я понимаю, что "образ дочернего процесса" по существу "становится" ls
после вызов execlp("ls", "ls");
.
На этом этапе, если в пути существует ls
, программа ls
вступает во владение и никогда не следует вызывать printf()
в строке 8.
Это работает, как и ожидалось, с фрагментом, который я выложил выше, и я получаю вывод ls
в текущем каталоге.
Однако, если я закомментирую fflush(stdout)
, printf()
вызывается!
Command not found: "ls"
Почему вызывается printf()
, если я комментирую fflush(stdout)
?