Есть ли способ сказать, если процесс является дочерним, если он сделал fork, а затем setsid
Если процесс сделал fork
тогда ребенок сделал setsid
Есть ли способ сказать, что это был ребенок первого процесса? Есть ли способ убить такой процесс вместе с его родителем?
1 ответ
setsid
не разрушает отношения родитель / ребенок. Таким образом, вы все еще можете получить дочерние элементы процесса, например, как описано здесь (связать нас с конкретной Ubuntu, но это работает для любого другого дистрибутива).
Родительский процесс всегда может легко отследить своих прямых потомков, так как fork возвращает их идентификатор (внуки становятся более хитрыми...) и отправляет сигнал любому из своих потомков при выходе (изящно).
prctl(PR_SET_PDEATHSIG, <signal>)
(удобный способ заставить детей получать сигнал, если родитель умирает) тоже переживет вызов setsid.