Команда оболочки jobs
поддержки a -p
опция просто получить список идентификаторов процесса. Существует ли простой способ получить просто список идентификаторов задания? (Я знаю, что существует, но я (еще) не действительно парень оболочки).
Это было бы очень удобно для kill
, поскольку уничтожение идентификатора задания вместо идентификатора процесса, кажется, также уничтожает все дочерние процессы.
Можно сделать что-то вроде этого:
# create some background jobs
sleep 10 & sleep 10 & sleep 10 & sleep 10 &
jobs | awk -F '[][]' '{print "%" $2}'
Это возвратится
%1
%2
%3
%4
то, которое я принимаю, - то, что Вы после.
Это было бы очень удобно для уничтожения, поскольку уничтожение идентификатора задания вместо идентификатора процесса, кажется, также уничтожает все дочерние процессы.
Можно сделать это другой путь.
Когда это печатает pid, можно уничтожить его и все его дети путем уничтожения его группы процесса.
Вы делаете это путем отрицания pid, например.
$ cat &
[1] 21273
$ kill -- -21273
Необходимо записать --
или иначе -pid
интерпретируется как сигнал (например, как kill -9
).
Пример:
$ man ls &
[1] 22267
$ ps j | head -1; ps j | grep 22267
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
18968 22267 22267 18968 pts/2 22327 T 500 0:00 man ls
22267 22281 22267 18968 pts/2 22327 T 500 0:00 /bin/sh /usr/bin/nroff -mandoc -Tutf8
22267 22282 22267 18968 pts/2 22327 T 500 0:00 less
22281 22286 22267 18968 pts/2 22327 T 500 0:00 groff -mtty-char -Tutf8 -mandoc
22286 22287 22267 18968 pts/2 22327 T 500 0:00 troff -mtty-char -mandoc -Tutf8
22286 22288 22267 18968 pts/2 22327 T 500 0:00 grotty
$ kill -- -22267
[1]+ Terminated man ls
$ ps j | grep 22267
$