[sisyphus] Q: shell and process groups

Anton Protopopov aspsk2 на gmail.com
Ср Май 5 05:41:51 UTC 2010


5 мая 2010 г. 0:43 пользователь Michael Pozhidaev <msp на altlinux.ru> написал:

> 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() сам себе отработатм, но
> плеер в группу не попадёт.


Именно так я и написал :)

Вызов setpgrp() делает вызывающий процесс (pid1) лидером новой группы,
состоящей
из одного процеса pid1. Если процесс pid2 параллельно с этим делает
setpgid(0, pid1),
то он пытается добавить себя к группе процессов с лидером pid1. Если процесс
pid2
запускает setpgid раньше, чем процесс pid1 запускает setpgrp, то он пытается
добавить
себя к несуществующей группе процессов, а это запрещено. Такое вполне может
случиться даже на одноядерной машине, так как никто не знает в какой
последовательности
будут запущены процессы после fork().

Спасибо, приделаю фикс и о результатах
> доложу.
>
> В качестве фикса, наверно, выделю плеер в свою собственную группу, к
> которой и будем обращаться. Ещё раз спасибо!
>
> --
> Michael Pozhidaev. Tomsk, Russia. E-mail: msp на altlinux.ru
> Russian info page: http://www.marigostra.ru/
>
> _______________________________________________
> Sisyphus mailing list
> Sisyphus на lists.altlinux.org
> https://lists.altlinux.org/mailman/listinfo/sisyphus
>
----------- следующая часть -----------
Вложение в формате HTML было удалено...
URL: <http://lists.altlinux.org/pipermail/sisyphus/attachments/20100505/07b3d565/attachment.html>


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