2016-03-11 3 views
1

Мы знаем, что fork() создает новый дочерний процесс и возвращает дочерний PID родительскому объекту и 0 ребенку. Что я думал о том, почему они спроектировали его таким образом (возвращаемое значение), почему возвращаемое значение не является в обратном порядке. Я думаю, что возвращение родительского PID к ребенку и 0 родительскому может также работать, каждый ребенок будет знать, кто является его родителем, и всякий раз, когда он заканчивается, он будет сигнализировать о соответствующем родительском процессе, каковы будут последствия этого подход? Я что-то упускаю?Почему обратное значение fork() не обратное?

+8

Родитель должен «ждать» для ребенка, поэтому ему нужен ПИД ребенка. Не наоборот. Ребенок уже может легко получить PID родителя. –

ответ

5

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

Если родитель хочет дождаться выхода определенного ребенка, ему необходимо передать pid ребенка в waitpid.

+0

Я думаю, что если бы был обратный путь, то должен был спроектировать функцию, чтобы получить дочерний pid для parent.So, я думаю, что это не настоящая причина этого. –

+1

@RajeevSingh Процесс может иметь несколько детей, но только один родитель. Поэтому 'getppid' всегда будет возвращать pid родителя вызывающих процессов. Даже если вы можете получить список дочерних pids, вам нужно знать, что именно. – dbush

0

Детский процесс может получить PID родителя getppid(). Поэтому родитель нуждается в fork для получения PID дочернего процесса

0

Если они спроектированы так, fork() возвращает 0 в родительский процесс, то в случае одного родительского процесса создается несколько дочерних процессов.

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

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