В настоящее время я внедряю группы процессов в подсистему POSIX моей операционной системы. Тем не менее, я немного запутался в спецификации POSIX (setsid) (а также на странице Википедии в группах процессов).
Наш терминальный слой отправляет SIGINT в процесс переднего плана (группа, идентификатор которой должен совпадать с идентификатором группы лидеров). В этом случае этот процесс переднего плана (наше приложение "login" ) становится лидером группы, вызывая setsid. Когда пользователь входит в систему, программа вилки и выполняет оболочку пользователя. На этом этапе я понимаю, что я вызываю setpgid из раздвоенного ребенка до вызова exec*. Это означает, что выполненная программа будет частью группы процессов с самого начала.
Если бы я хотел запустить новый разветвленный дочерний элемент вне группы процессов, я бы просто вызвал setsid в разветвленном ребенке до вызова exec*.
Это правильно? Есть ли какие-то действительно неясные вещи, которые я должен проверять или делать?
Как следующий вопрос, который, я считаю, я уже знаю, требуется ли fork передавать членство в группе? Или это нужно сделать с помощью setpgid после каждого вызова fork? Я собираю группы процессов, переданные fork из определения POSIX fork.
Спасибо заранее.