[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