#c #unix #fork
#c #unix #fork
Вопрос:
Я изучаю fork () и пытаюсь создать небольшую программу, которая печатает дочерний элемент перед родительским. Это работает, но родители печатают 2 раза, и я не понимаю, почему.
Ожидаемый результат :
4 5 6
1 2 3
Реальный результат :
4 5 6
1 2 3
1 2 3
Вот мой код :
int main (int argc, char** argv) {
int childPid = fork();
if (childPid == 0){
printf("4 5 6n");
}
wait(NULL);
printf("1 2 3n");
exit(0);
}
Ответ №1:
Строка printf("1 2 3n");
будет выполнена как родителем, так и дочерним элементом. Дочерний элемент столкнется со wait(NULL);
строкой, но пропустит ее, поскольку у него нет дочерних элементов, и напечатает «1 2 3», а затем завершит работу. Тем временем родительский элемент получит статус завершения дочернего элемента и продолжит выполнение, также напечатав «1 2 3» и завершив работу. Чтобы заставить его работать должным образом, отредактируйте его соответствующим образом:
int main (int argc, char** argv) {
int childPid = fork();
if (childPid == 0){
printf("4 5 6n");
exit(0);
}
wait(NULL);
printf("1 2 3n");
exit(0);
}