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.
O comando shell jobs
suporta a opção -p
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 eu não sou realmente um cara de concha (ainda)).
Isso seria muito útil para kill
, já que matar um ID de trabalho em vez de um ID de processo também parece matar todos os processos filhos.
This would be very handy for kill, as killing a job id instead of a process id seems to also kill all child processes.
Você pode fazer isso de uma maneira diferente.
Quando ele imprime o pid, você pode matá-lo e a todos os seus filhos eliminando seu grupo de processos .
Você faz isso negando o pid, por exemplo
$ cat &
[1] 21273
$ kill -- -21273
Você precisa escrever --
ou senã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
$
Tags bash job-control