Listar identificações de tarefa (em vez de identificações de processo)

3

O comando shell jobssuporta uma -popção para obter apenas a lista de IDs de processo. Existe uma maneira fácil de obter apenas uma lista de IDs de trabalho? (Eu sei que existe, mas não sou realmente um cara de concha (ainda)).

Isso seria muito útil kill, pois matar um ID do trabalho em vez de um ID do processo também parece matar todos os processos filhos.

Zardoz
fonte

Respostas:

4

Você pode fazer algo assim:

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

Isso retornará

%1
%2
%3
%4

que eu assumo é o que você procura.

Glenn Jackman
fonte
3

Isso seria muito útil para matar, pois matar um ID de trabalho em vez de um ID de processo também parece matar todos os processos filhos.

Você pode fazer isso de uma maneira diferente.

Quando ele imprime o pid, você pode matá-lo e todos os seus filhos matando seu grupo de processos .

Você faz isso negando o pid, por exemplo

$ cat &
[1] 21273
$ kill -- -21273

Você precisa escrever --ou então -pidé interpretado como um sinal (por exemplo, como kill -9).

Exemplo:

$ 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

$
Mikel
fonte