* [sisyphus] Q: shell and process groups @ 2010-05-03 4:28 Michael Pozhidaev 0 siblings, 1 reply; 4+ messages in thread From: Michael Pozhidaev @ 2010-05-03 4:28 UTC (permalink / raw) To: sisyphus Привет всем! В мане credentials(7) говориться следующее: the shell creates a new process group for the process(es) used to execute single command or pipeline (e.g., the two pro‐ cesses created to execute the command "ls | wc" are placed in the same process group). Тем не менее, по факту /bin/sh -c в альте даже и не думает порождать новую группу процессов, ни когда запускаются несколько команд через трубу, ни одна команда. Вопрос в том: как оно должно быть и в каких ситуациях. Может быть написанное в мане не относится к -c? Может ли это поведение отличаться от дистрибутива к дистрибутиву. Очень прошу знающих людей прояснить этот момент. -- Michael Pozhidaev. Tomsk, Russia. E-mail: msp@altlinux.ru Russian info page: http://www.marigostra.ru/ ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <t2zd0dba48d1005040422obfab84bfkebb2f3f45ff5f978@mail.gmail.com>]
* Re: [sisyphus] Q: shell and process groups @ 2010-05-04 14:39 ` Michael Pozhidaev 0 siblings, 1 reply; 4+ messages in thread From: Michael Pozhidaev @ 2010-05-04 14:39 UTC (permalink / raw) To: ALT Linux Sisyphus discussions 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/ ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <t2vd0dba48d1005040843n84daa33fy42445390c47f3012@mail.gmail.com>]
* Re: [sisyphus] Q: shell and process groups @ 2010-05-04 20:43 ` Michael Pozhidaev 0 siblings, 1 reply; 4+ messages in thread From: Michael Pozhidaev @ 2010-05-04 20:43 UTC (permalink / raw) To: ALT Linux Sisyphus discussions 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/ ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <p2nd0dba48d1005042241me3b7c619s32b13c78a4bb3c84@mail.gmail.com>]
* Re: [sisyphus] Q: shell and process groups @ 2010-05-06 8:58 ` Michael Pozhidaev 0 siblings, 0 replies; 4+ messages in thread From: Michael Pozhidaev @ 2010-05-06 8:58 UTC (permalink / raw) To: ALT Linux Sisyphus discussions Hello, Anton Protopopov! > Именно так я и написал :) Сработало! Прописал в Thanks! :) -- Michael Pozhidaev. Tomsk, Russia. E-mail: msp@altlinux.ru Russian info page: http://www.marigostra.ru/ ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-05-06 8:58 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2010-05-03 4:28 [sisyphus] Q: shell and process groups Michael Pozhidaev 2010-05-04 14:39 ` Michael Pozhidaev 2010-05-04 20:43 ` Michael Pozhidaev 2010-05-06 8:58 ` Michael Pozhidaev
ALT Linux Sisyphus discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/sisyphus/0 sisyphus/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 sisyphus sisyphus/ http://lore.altlinux.org/sisyphus \ sisyphus@altlinux.ru sisyphus@altlinux.org sisyphus@lists.altlinux.org sisyphus@lists.altlinux.ru sisyphus@lists.altlinux.com sisyphus@linuxteam.iplabs.ru sisyphus@list.linux-os.ru public-inbox-index sisyphus Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.sisyphus AGPL code for this site: git clone https://public-inbox.org/public-inbox.git