2014-10-30 7 views
0

Процессы, которые могут создать другие процессы (дочерние процессы), а между тем следующее правильно:Создание дочерних процессов в Linux

а) процесс имеет PID = 0

б) процесс ребенок может продолжать жить независимой

с) Процесс создатель копирует контекст ребенка процессов

д) Все выше истинны

Мое мнение таково, что a) не может быть из-за того, что PID = 0 зарезервирован, создатель процессора также не копирует свой контекст в дочерние процессы, поэтому я думаю о b, потому что он может жить независимо, но не будет ли он тогда называться демона? Итак, есть правильный (истинный) ответ на этот вопрос?

ответ

0

Системный вызов fork() создает клон/копию существующего процесса. Теперь выполняются два процесса: одни и те же данные, местоположение в программе и образ процесса. Разница - это возвращаемое значение системного вызова fork().

Поскольку функция fork() возвращает разные значения родительскому процессу (forking) и дочернему (разветвленному) процессу, вы можете определить, выполняетесь ли вы в родительском или дочернем.

Процесс родительский (forking) получает результат fork() == childpid в родительском процессе, поэтому родитель знает идентификатор процесса дочернего элемента (и может, таким образом, убить его, дождаться его завершения и т. Д.). ,

Родитель может также получить результат fork() == -1, что указывает на сбой системного вызова fork().

Процесс child (forked) получает результат fork() == 0, когда в дочернем процессе, и если вы хотите узнать идентификатор процесса для ребенка, вы просто попросите текущий идентификатор процесса получить процесс id ребенка.

Вот связанный пост с образцом кода, который я опубликовал, How to use fork().

Тонкость заключается в том, что (a) неверно, потому что каждый из родителей и ребенка имеет идентификатор процесса, который не равен 0, но возврат из fork() всегда равен 0 в дочернем элементе. Поэтому может показаться, что в руководстве указано, что PID = 0. Часть (b) истинна. Часть (c) неверна, потому что она не является создателем процесса, которая копирует что-либо, это системный вызов (в контексте родительского процесса), который выполняет копирование.

1

Читайте о fork, чтобы узнать, как создается дочерний процесс. Это может ответить на ваш вопрос

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