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