[sisyphus] Q: shell and process groups

Michael Pozhidaev msp на altlinux.ru
Вт Май 4 20:43:19 UTC 2010


Hello, Anton Protopopov!

>     после смерти синтезатора.
>
> Но сигнал все-таки доходит?

Скорее всего нет. Исследование в strace планировали провести
завтра. Есть такое наблюдение: поскольку процесс не сразу после своего
порождения меняет свою группу, то SIGKILL шлётся в два этапа: сначала
персонально этому процессу на случай, если он ещё не сменил свой pgid, а
потом на всю группу. Если плеер указывается как exec aplay, а не просто
aplay, то проблема сразу же исчезает. То есть персональный SIGKILL
всегда попадает в цель, а вот SIGKILL на группу иногда даёт промахи.
В случае без exec SIGKILL прибивает /bin/sh, а aplay продолжает работать.

> Ну, например, еще есть race: setpgid() в плейере может запускаться раньше,
> чем setpgrp() в синтезаторе. В этом случае он, очевидно, не сможет установить
> лидером синтезатор, а вернет ошибку.

О, действительно! Только, скорее, наоборот. В мане по setpgid говорится,
что pgid должен быть existing process group. Existing, как понимаю,
имеется ввиду, что существует корень группы. 
В этом race setpgid() провалится, а setpgrp() сам себе отработатм, но
плеер в группу не попадёт. Спасибо, приделаю фикс и о результатах
доложу.

В качестве фикса, наверно, выделю плеер в свою собственную группу, к
которой и будем обращаться. Ещё раз спасибо!

-- 
Michael Pozhidaev. Tomsk, Russia. E-mail: msp на altlinux.ru
Russian info page: http://www.marigostra.ru/



Подробная информация о списке рассылки Sisyphus