Вы можете сделать что-то вроде этого:
# create some background jobs sleep 10 & sleep 10 & sleep 10 & sleep 10 & jobs | awk -F '[][]' ''
Это вернется
%1 %2 %3 %4
Я полагаю, это то, что вы после.
Команда shell jobs
поддерживает -p
опцию, чтобы просто получить список идентификаторов процессов. Есть ли простой способ получить просто список идентификаторов работы? (Я знаю, что есть, но я на самом деле не парнишка (пока)).
Это было бы очень удобно kill
, поскольку уничтожение идентификатора задания вместо идентификатора процесса, по-видимому, также уничтожает все дочерние процессы.
Вы можете сделать что-то вроде этого:
# create some background jobs sleep 10 & sleep 10 & sleep 10 & sleep 10 & jobs | awk -F '[][]' ''
Это вернется
%1 %2 %3 %4
Я полагаю, это то, что вы после.
Это было бы очень удобно для kill, поскольку уничтожение идентификатора задания вместо идентификатора процесса, по-видимому, также уничтожает все дочерние процессы.
Вы можете сделать это по-другому.
Когда он печатает 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 $