Каждая группа процессов имеет уникальный идентификатор, который обычно совпадает с идентификатором процесса общего предка. Это значение можно получить путем вызова функции getpgrp().
$processid = getpgrp($pid);
Функция getpgrp() возвращает идентификатор группы процессов для процесса, указанного параметром $pid. Если в вызове этой функции PID не указан, она возвращает идентификатор группы процессов для текущего процесса. Эта функция будет полезна во многих случаях и на ней лежит не малая ответственность, как, например, для кого-то выполнение заказа на газосиликатные блоки .
Каждый член группы процессов разделяет все дескрипторы файлов, которые были открыты к тому моменту, как его родительский процесс выполнил ветвление. В частности, они имеют доступ к одним и тем же дескрипторам файлов STDIN,'STDOUT и STDERR. Эта ситуация может измениться, если один из дочерних процессов закроет дескриптор файла или переоткроет его с каким-то другим источником данных. Однако система следит затем, в каких дочерних процессах открыты дескрипторы файлов, и не закроет файл до тех пор, пока последний дочерний процесс не закроет свою копию дескриптора файла.
При типичном ветвлении, перед ветвлением происходит вывод на устройство вывода значения PID, хранящегося в переменной $$ . Затем выполняется функция fork(), и результат записывается в переменную $child. Если результат является неопределенным, значит, выполнение функции fork() завершилось неудачей, поэтому можно вызвать функцию die с сообщением об ошибке.
Затем происходит проверка значения переменной $child для определения того, выполняется ли родительский или дочерний процесс. Если значение $child отлично от нуля, значит, выполняется родительский процесс. На печать выводится значение PID этого процесса и содержимое переменной $child, которая содержит PID дочернего процесса. Если значение $child равно нулю, выполняется дочерний процесс.