3

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

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

2 ответа2

4

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

# create some background jobs
sleep 10 & sleep 10 & sleep 10 & sleep 10 & 
jobs | awk -F '[][]' '{print "%" $2}'

Это вернется

%1
%2
%3
%4

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

3

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

$

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .