[sisyphus] Q: shell and process groups
Anton Protopopov
aspsk2 на gmail.com
Вт Май 4 11:22:52 UTC 2010
3 мая 2010 г. 8:28 пользователь Michael Pozhidaev <msp на altlinux.ru> написал:
> Привет всем!
>
> В мане 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?
Написанное относится к interactive shell. Все процессы в pipeline
интерактивного
шелла действительно будут находиться в новой группе, лидером которой будет
первый процесс в pipeline:
$ ps -o pid,ppid,pgid,cmd | cat
PID PPID PGID CMD
6858 6856 6858 bash
6982 6858 6982 ps -o pid,ppid,pgid,cmd
6983 6858 6982 cat
Здесь ps является лидером группы процессов, состоящей из процессов 6982 и
6983.
Команда "bash -c" является просто еще одним членом pipeline, поэтому,
например,
$ /bin/sleep 1 | bash -c 'ps -o pid,ppid,pgid,cmd | cat'
PID PPID PGID CMD
6858 6856 6858 bash
6993 6858 6993 /bin/sleep 1
6994 6858 6993 bash -c ps -o pid,ppid,pgid,cmd | cat
6995 6994 6993 ps -o pid,ppid,pgid,cmd
6996 6994 6993 cat
Здесь bash создает новую группу процессов (pgrp=6993), лидером которой
является первый процесс в pipeline - /bin/sleep.
----------- следующая часть -----------
Вложение в формате HTML было удалено...
URL: <http://lists.altlinux.org/pipermail/sisyphus/attachments/20100504/2b51c488/attachment.html>
Подробная информация о списке рассылки Sisyphus