install libpt-dev
export PTLIB_CONFIG=/usr/share/ptlib/make/ptlib-config
./configure
Вы можете перечислить все процессы в данной группе, отфильтровав вывод ps
.
ps -e -o pgid,pid | awk -v p=1234 '$1 == p {print $2}'
Нет возможности ps
для прямой фильтрации по PGID, вероятно, потому, что это не очень часто бывает полезно.
То, что ps
делает под капотом, не имеет большого значения.
Это не атомарно, в отличие от kill -- -1234
. Но даже если бы существовал способ атомарного перечисления процессов в группе процессов, что хорошего в этом было бы? К моменту обработки списка он может быть неполным или включать мертвые процессы, PID которых был повторно использован.
Чтобы сделать что-то полезное с набором процессов в группе процессов, ядру пришлось бы предоставить интерфейс, который выполняет действие, а не только интерфейс, в котором перечислены члены группы. Единственный такой интерфейс — посылать сигнал процессам.
При отправке сигнала на PID 0 (ноль) сигнал доставляется всем процессам, которые являются членами той же группы процессов, что и отправитель. Группа процессов, отличная от текущей, может быть обозначена с помощью kill(-PGID)
(или kill -- -PGID
в оболочке), где PGID
— это идентификатор группы процессов.
Группа процессов PID возвращается функцией getpgid()
, а группу процессов текущего процесса можно найти с помощью getpgrp()
.
В оболочке вы можете использовать
$ ps -opid,pgid,command
для получения PID, PGID (идентификатор группы процессов) и командной строки вашего текущего сеанса.
Это может вернуть что-то вроде
PID PGID COMMAND
20716 20716 -ksh93 (ksh93)
83662 83662 -ksh93 (ksh93)
4322 4322 /usr/X11R6/bin/xclock
5374 5374 tmux: client (/tmp/tmux-11000/default) (tmux)
78747 78747 -ksh93 (ksh93)
29298 29298 ps -opid
63563 63563 -ksh93 (ksh93)
63327 63327 mutt
21790 21790 -ksh93 (ksh93)
64493 64493 /bin/sh /usr/X11R6/bin/startx
14485 64493 xinit /home/kk/.xinitrc -- /usr/X11R6/bin/X :0 -auth /home/kk/.serverauth.E3cwuT5FZR
93531 93531 sh /home/kk/.xinitrc
48598 93531 flwm
28154 93531 xterm
73053 93531 xterm
После уточнения вопроса:
цель группы процессов состоит в том, чтобы иметь возможность посылать сигнал всем своим членам без, зная идентификаторы процессов каждого отдельного члена.
Без концепции группы процессов нужно было бы получить все процессы в системе, выяснить, как они связаны (используя идентификаторы родительских процессов) и выполнить итерацию по соответствующим процессам, посылая каждому сигнал.
Ядро делает это, но оно знает и отслеживает группы процессов, поэтому ему никогда не придется перебирать все процессы, чтобы послать сигнал группе процессов, только по членам группы .
Поскольку идентификатор группы процессов открывается для пользователя, достаточно будет запросить идентификатор группы процессов только у одного процесса, прежде чем можно будет отправить сигнал всем процессам в эта группа.
Desde la línea de comandos en Linux, se puede usar pgrep
desde procps -ng con el indicador--pgroup
(o -g
).