2016-05-12 3 views
0

Я пытаюсь использовать fork() в C++. Однако на терминале это выглядит странно.C++ fork() выглядит странно на терминале linux

как вы можете видеть на снимке экрана, мой код просто выводит PID своего процесса и является ли он дочерним или родительским. Но когда родительский процесс завершен, выход ребенка будет напечатан в новом приглашении.

И самое главное, он все еще ждет моей команды после того, какая программа выполнена.

Я не понимаю, почему он все еще ждет ввода, как показано на рисунке.

My code and its output

+3

Весь код и вывод должны быть вставлены * здесь * и не связаны на внешнем сайте. – crashmstr

+2

Пожалуйста, не публикуйте фотографии с текстом, вместо этого введите текст в текст. –

ответ

4

fork() не порождает "пустой" процесс двоичную. Он создает клон вызывающего процесса, и оба процесса запускаются параллельно. Это означает, что если разветвленный процесс не превращает execve в другой образ процесса или заканчивается, вы получаете две копии одной и той же программы почти в том же состоянии, что и рядом. Единственное различие между ними заключается в том, что ребенок получает 0 в качестве возвращаемого значения fork, а родитель видит PID дочернего процесса.

Вы наверняка знаете эти рассказы SciFi, где человек внезапно копируется на квантовый уровень и отвечает их оригиналу, и они вступают в спор о том, кто является оригиналом и кто является копией. Это точно ситуация родительского и дочернего процесса после вилки.

И самое главное, он все еще ждет моей команды после того, как программа будет выполнена.

Нет, это не так. Это просто похоже на консоль: родительский процесс завершается, и, таким образом, оболочка будет печатать приглашение. Затем дочерний процесс печатает свои материалы после подсказки. Попробуйте позвонить со сном, т. Е.

~/... > ./hw3 ; sleep 1 
+0

Большое спасибо! Хотелось бы, чтобы у меня хватило репутации, чтобы проголосовать. –

+0

@JustinOh Голосовали за вас. Вы можете принять ответ, если он отвечает на ваш вопрос, и получите +2 самостоятельно. :-) – jotik

Смежные вопросы