Перечислите идентификаторы задания (вместо этого идентификаторы процесса)

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

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

3
задан 29.04.2011, 02:30

2 ответа

Можно сделать что-то вроде этого:

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

Это возвратится

%1
%2
%3
%4

то, которое я принимаю, - то, что Вы после.

4
ответ дан 07.12.2019, 23:27

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

Можно сделать это другой путь.

Когда это печатает 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

$
3
ответ дан 07.12.2019, 23:27

Теги

Похожие вопросы