2015-09-19 3 views
0

Я беру курс операционной системы. В настоящее время я изучаю главу об управлении процессом.Что такое родительский процесс, когда мы выполняем системный вызов fork()?

Допустим, я пишу код, например:

void main(){ 
    int pid = fork(); 
    // Some code goes here 
} 

Этот код в основном создает дочерний процесс, который является дубликатом родительского процесса. Все одинаково между процессами, кроме PID. Что такое родительский процесс? Выполняется ли программа C (выполняется файл a.out)?

+1

Родительский процесс - это процесс, в котором 'fork' возвращает значение больше нуля. Или родительский процесс - это процесс, в котором 'getpid' и' getppid' возвращают те же значения, что и до 'fork'. Или это процесс, который может использовать 'wait' для восстановления статуса выхода дочернего элемента. Для первого порядка нет других различий между родителем и ребенком. Если вы действительно задаете вопрос «что такое процесс?» то пожалуйста уточните. – zwol

+0

Нет. Я знаю, что такое процесс. Меня смущает следующее: есть ли процесс, сама программа C в выполнении родительского процесса? И тогда, когда я делаю fork(), теперь есть два процесса, связанных с этим кодом при выполнении. – Ralph

+0

Прошу прощения, я не могу понять, «это процесс, сама программа C в выполнении родительского процесса?». Каждый процесс имеет ровно одну программу, которую он выполняет (если только это не зомби), но процесс и программа являются двумя отдельными и несравнимыми вещами. (И, поскольку я подозреваю, что это ключ к вашей путанице, * любое число * процессов может одновременно выполнять одну и ту же программу.) – zwol

ответ

0

Когда начинается выполнение, выполняется один процесс. После fork() есть два процесса, которые будут выполнять код в «Некоторый код идет здесь». Таким образом, он фактически клонирует процесс, поскольку он выполняет вызов fork(), и этот клонированный процесс получает новый pid.

Первоначальный процесс называется родительским процессом.

+0

Когда fork() завершено, родительский процесс прекратит выполнение во время выполнения дочернего процесса? – Ralph

+0

Нет, они оба будут работать одновременно, например, на двух процессорах. –

0

Родительский процесс - это процесс, который рождает другой процесс-процесс. в main() примера.c вы используете fork(): для создания идентичного процесса. что идентично в контексте вашей путаницы, заключается в том, что оба выполняются команды из example.c, если не возникает определенное событие, которое отделяет дочерний процесс от example.c. в части кода дочернего процесса (pid < 0) вы можете использовать функции семейства exec для отсоединения дочернего элемента от example.c.

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

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