Список идентификаторов заданий (вместо идентификаторов процессов)

3080
Zardoz

Команда shell jobsподдерживает -pопцию, чтобы просто получить список идентификаторов процессов. Есть ли простой способ получить просто список идентификаторов работы? (Я знаю, что есть, но я на самом деле не парнишка (пока)).

Это было бы очень удобно kill, поскольку уничтожение идентификатора задания вместо идентификатора процесса, по-видимому, также уничтожает все дочерние процессы.

3

2 ответа на вопрос

4
glenn jackman

Вы можете сделать что-то вроде этого:

# create some background jobs sleep 10 & sleep 10 & sleep 10 & sleep 10 &  jobs | awk -F '[][]' '' 

Это вернется

%1 %2 %3 %4 

Я полагаю, это то, что вы после.

3
Mikel

Это было бы очень удобно для 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  $