[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