Пребывая в некотором глубоком аху недоумении, обращаюсь к друзьям за советом и утешением.
Есть у меня некий скриптик на пайтоне, который запускается неким главным процессом в системе. Этот главный процесс помимо моего скриптика еще кучу всего запускает. И вот, допустим, этого скриптика хотят убить. Посылают ему TERM. Он этот TERM культурненько перехватывает, делает себе там, что нужно, и тихо-мирно помирает, путем вызова sys.exit(). Вместе с ним, однако, помирают все процессы, запущенные вышеупомянутым главным процессом, равно как и сам главный процесс, иными словами, вся process group неиллюзорно накрывается медным тазом. Будучи пытаем посредством strace, пайтон признался, что перед смертью вызвал exit_group(1), каковой и убил все процессы в группе, хотя должен был, если верить ману, убить только лишь потоки внутри текущего процесса. Собственно, вот и все обстоятельства, в свете которых я и пребываю в глубоком аху недоумении. Потому как запускать пайтон в своей группе - жирно будет, ну и вообще непонятно, какого хрена он этот exit_group вызывает. Гугль не был мне в помощь. Прежде чем я полезу в сорсы ядра и пайтона, возможно, кто-то с таким сталкивался, и сможет излечить мои печали одним метким словом?...
Апдейт: я идиот, у меня был дурацкий баг: некая переменная неправильно переопределялась в неправильном scope-е. Я все равно не понимаю, почему exit_group() убивает всю группу процессов, но теперь это уже не так важно.
Originally posted on dimrub.vox.com