2017-02-20 2 views
-3

Мне сложно понять, сколько процессов я получаю с помощью команды fork(). Если я начну с переменной pid_t pid; и call fork() Я буду иметь дочерний и родительский процесс.Команда Fork() в Linux C coding

Теперь, если я позвоню в fork сразу после этого первого fork(). Знаю ли я, что у вас 3 или 4 процесса? Как эта вилка вызывала как родителя, так и ребенка, или только ребенка? Таким образом, дочерний процесс fork() другого дочернего процесса создает 3 процесса? Или fork вызвал как родительский, так и дочерний, так что теперь у родителя будет ребенок, у которого есть собственный ребенок, и у родителя теперь есть второй дочерний процесс?

Если fork вызывается снова в третий раз, все 3 или 4 процесса получают детей? Только последний ребенок?

В зависимости от того, как работает fork(), сколько процессов создается при вызове fork() 3 раза? Я застрял между 4,6 или 8.

Here is the Linux C coding. How many processes will run when this program iis executed, including itself. Every process must terminate using the return(0)

+0

Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу «Как спросить», чтобы помочь прояснить этот вопрос. – Olaf

+3

Пожалуйста, отправьте код как * код *, а не изображение. –

+2

Итак, размещение кода в качестве изображения было проще, чем следовать правилам сайта и опубликовать его как текст с простой копией/вставкой? – Olaf

ответ

0

При вызове fork(), процесс дублируется, и как родитель и ребенок продолжит выполнение всего кода в программе. Если вы хотите, чтобы они действовали по-разному, вам нужно проверить возвращаемое значение - он возвращает 0 в дочернем элементе PID дочернего элемента в родительском элементе. Если у вас нет какого-либо кода, который условно оценивает это, они оба будут выполнять все одинаково. Поэтому, если он снова вызовет fork(), это произойдет как у родителя, так и у ребенка, и вы получите 4 процесса: исходный родитель, двое детей и один внук. И третий fork() приводит к 8 процессам.

+0

Спасибо, я понял это, осознав, что как родитель, так и ребенок каждый раз получают новый процесс. – SuperHippo

0

Я считаю, что это 8, будет ли каждая вилка() просто удвоить количество процессов, так как нет инструкции if, указывающей, что только родительский/дочерний выполняет форкировку.

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