Проблема в том, что оболочка хочет, чтобы процесс находился в правильной группе процессов. Если оболочка не вызывает setpgid()
для своего дочернего процесса, существует окно времени, в течение которого дочерний процесс не является частью группы процессов, в то время как выполнение оболочки продолжается. (При вызове setpgid()
оболочка может гарантировать, что дочерний процесс является частью группы процессов после этого вызова).
Существует еще одна проблема, заключающаяся в том, что дочерний процесс может выполнить новую программу (через exec
) до того, как будет правильно установлен идентификатор его группы процессов (т.е. до того, как родительский вызов вызовет setpgid()
). Вот почему дочерний процесс должен также вызвать setpgid()
(до вызова exec()
).
Описание, по общему признанию, довольно плохое. Здесь решается не одна проблема; это действительно две отдельные проблемы. Один - родитель (то есть оболочка) хочет, чтобы дочерний процесс был в правильной группе процессов. Второе - новая программа должна начать выполнение только после того, как ее процесс уже помещен в нужную группу процессов.