<br><div class="gmail_quote">3 мая 2010 г. 8:28 пользователь Michael Pozhidaev <span dir="ltr"><<a href="mailto:msp@altlinux.ru">msp@altlinux.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Привет всем!<br>
<br>
В мане credentials(7) говориться следующее:<br>
<br>
the shell creates a new process group for<br>
the process(es) used to execute single command or pipeline (e.g., the two pro‐<br>
cesses created to execute the command "ls | wc" are placed in the same process<br>
group).<br>
<br>
Тем не менее, по факту /bin/sh -c в альте даже и не думает порождать<br>
новую группу процессов, ни когда запускаются несколько команд через<br>
трубу, ни одна команда.<br></blockquote><div><br>Интересно, а зачем это понадобилось?<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Вопрос в том: как оно должно быть и в каких ситуациях. Может быть<br>
написанное в мане не относится к -c?</blockquote><div><br>Написанное относится к interactive shell. Все процессы в pipeline интерактивного<br>шелла действительно будут находиться в новой группе, лидером которой будет<br>
первый процесс в pipeline:<br> $ ps -o pid,ppid,pgid,cmd | cat<br> PID PPID PGID CMD<br> 6858 6856 6858 bash <br> 6982 6858 6982 ps -o pid,ppid,pgid,cmd <br> 6983 6858 6982 cat<br>Здесь ps является лидером группы процессов, состоящей из процессов 6982 и 6983.<br>
<br>Команда "bash -c" является просто еще одним членом pipeline, поэтому, например,<br>$ /bin/sleep 1 | bash -c 'ps -o pid,ppid,pgid,cmd | cat'<br> PID PPID PGID CMD<br> 6858 6856 6858 bash <br> 6993 6858 6993 /bin/sleep 1 <br>
6994 6858 6993 bash -c ps -o pid,ppid,pgid,cmd | cat <br> 6995 6994 6993 ps -o pid,ppid,pgid,cmd <br> 6996 6994 6993 cat<br>Здесь bash создает новую группу процессов (pgrp=6993), лидером которой<br>является первый процесс в pipeline - /bin/sleep.<br>
</div></div>