[sisyphus] Q: shell and process groups
Michael Pozhidaev
msp на altlinux.ru
Вт Май 4 14:39:29 UTC 2010
Hello, Anton Protopopov!
> Тем не менее, по факту /bin/sh -c в альте даже и не думает порождать
> новую группу процессов, ни когда запускаются несколько команд через
> трубу, ни одна команда.
>
> Интересно, а зачем это понадобилось?
Антон, спасибо за подробное разъяснение. Тут решается одна проблема,
суть которой сейчас попробую изложить. Речь идёт о разработке
приложения, код которого Вы можете увидеть в git:
http://git.altlinux.org/people/msp/public/voiceman.git
Код, который делает обсуждаемые действия, лежит в файле
voiceman/executors/default.c.
Теперь задача:
нам необходимо запускать и останавливать последовательность пар команд,
каждая из которых ззадаётся аргументом для /bin/sh -c. Если говорить
точнее, то речь идёт о запуске речевого синтезатора и плеера. Они
связаны между собой трубой. Вывод речевого синтезатора направляется на
вход плеера. В общем случае синтезатор и плеер могут работать не в одном
процессе, а порождать дочерние и т. д. Необходимо уметь по команде
прибить всю эту пачку процессов, включая все процессы синтезатора и
плеера. Для этого перед вызовом /bin/sh -c для синтезатора вызывается
setpgrp(), а перед вызовом этого же для плеера вызывается setpgid() для
включения процесса плеера в ту же группу, которая породилась для работы
синтезаторов.
Итак, сейчас код не работает. Точнее, он ведёт себя превосходно на
альте, но на проблемы жалуются пользователи Ubuntu.
Проблема выглядит так, что процесс плеера, который в большинстве случаев
aplay. вовремя не получает SIGKILL. Есть задержка, которая вполне может
быть просто проигрыванием данных, которые забуферизировались в трубе
после смерти синтезатора.
Проблему объясняло бы предположение, что когда вызывается /bin/sh -c он
создаёт свою группу, теряет связь с группой синтезатора и aplay уже не
получает сигнала, разосланного через killpg.
В общих чертах такая картина. Проблема до сих пор не решена. Решать её
тяжело, т.к. на моей машине-то всё работает безупречно. Ещё есть
некоторые дополнительные детали и ньюансы, заставляющие думать, что тут
дело всё-таки в работе над процессами.
--
Michael Pozhidaev. Tomsk, Russia. E-mail: msp на altlinux.ru
Russian info page: http://www.marigostra.ru/
Подробная информация о списке рассылки Sisyphus