A resposta aceita mataria todos os trabalhos (o que é suficiente neste caso) e não apenas os interrompidos. Se você quiser matar apenas os Parados, execute:
A maneira mais fácil é simplesmente tentar novamente a saída imediatamente; bashentenderá que isso significa "matar todos os trabalhos interrompidos e sair".
Normalmente, se você receber essa mensagem, precisará sair duas vezes. Por exemplo, primeiro Ctrl+Dlhe dá a mensagem de aviso para informá-lo sobre os trabalhos interrompidos, pressionando pela segunda vez, você sairá matando os trabalhos. Isso se aplica a logoute exitcomandos.
Para matá-los manualmente, tente: kill $(jobs -p).
Se você não quiser matar trabalhos do seu shell atual, você pode removê-los da tabela de trabalhos ativos sem matar usando disowno comando. Por exemplo
Trabalhos interrompidos também podem ser determinados pelo estado do processo ( Tcaractere), o que significa que o processo foi interrompido por um sinal como SIGSTOP, SIGTSTPou outro (como SIGTTIN, ou SIGTTOU).
Caso jobsum comando interno do shell não esteja disponível, os processos interrompidos podem ser listados pelo seguinte comando:
ps wuax | awk '$8 ~ "T"'
Para matar todos eles, você pode basicamente digitar:
Apenas no caso de isso ajudar alguém - a maioria das pessoas está aqui porque tem alguns processos parados que iniciaram, talvez em segundo plano pelo shell. Eu precisava encontrar processos, como root, parados por outros usuários, para os quais as variantes do jobscomando não funcionariam.
Um pouco de pesquisa man psme levou a isso:
ps -a -o pid,user,cmd,state | grep 'T$'
Explicação: o -asinalizador diz mostrar todos os processos, depois -ocontrola a saída, quais informações serão mostradas sobre cada processo. Estou escolhendo pid, user, cmd(a linha de comando) e state, que é o estado do processo .
De man ps:
PROCESS STATE CODES
Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the
state of a process:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
então, finalmente, eu o canalizo para o grep T$que diz, mostre-me todos os processos que têm T na última coluna.
E então eu tenho uma boa lista de todos os processos de diferentes usuários que estão no estado parado.
$ ps -a -o pid,user,cmd,state | grep 'T$'
865 joson74+ python T
885 joson74+ sh -c less T
886 joson74+ less T
1014 minames+ python3.4 -i /home/minames T
5352 MooKo nano stdio.h T
7851 harry tmux attach T
12083 harry tmux attach T
13495 gorylla+ python3.4 -i /home/gorylla1 T
18009 conr1d vim T
19664 enythin+ python T
24906 wardlist python T
Para matar rapidamente todos os trabalhos interrompidos no bash, digite:
jobs -ps
lista os IDs de processo (-p
) dos trabalhos interrompidos (-s
).kill -9 `jobs -ps`
envia sinais SIGKILL para todos eles.Tente digitar isto:
A resposta aceita mataria todos os trabalhos (o que é suficiente neste caso) e não apenas os interrompidos. Se você quiser matar apenas os Parados, execute:
A maneira mais fácil é simplesmente tentar novamente a saída imediatamente;
bash
entenderá que isso significa "matar todos os trabalhos interrompidos e sair".Normalmente, se você receber essa mensagem, precisará sair duas vezes. Por exemplo, primeiro Ctrl+Dlhe dá a mensagem de aviso para informá-lo sobre os trabalhos interrompidos, pressionando pela segunda vez, você sairá matando os trabalhos. Isso se aplica a
logout
eexit
comandos.Para matá-los manualmente, tente:
kill $(jobs -p)
.Se você não quiser matar trabalhos do seu shell atual, você pode removê-los da tabela de trabalhos ativos sem matar usando
disown
o comando. Por exemploTrabalhos interrompidos também podem ser determinados pelo estado do processo (
T
caractere), o que significa que o processo foi interrompido por um sinal comoSIGSTOP
,SIGTSTP
ou outro (comoSIGTTIN
, ouSIGTTOU
).Caso
jobs
um comando interno do shell não esteja disponível, os processos interrompidos podem ser listados pelo seguinte comando:Para matar todos eles, você pode basicamente digitar:
Aqui está um teste simples:
Apenas no caso de isso ajudar alguém - a maioria das pessoas está aqui porque tem alguns processos parados que iniciaram, talvez em segundo plano pelo shell. Eu precisava encontrar processos, como root, parados por outros usuários, para os quais as variantes do
jobs
comando não funcionariam.Um pouco de pesquisa
man ps
me levou a isso:Explicação: o
-a
sinalizador diz mostrar todos os processos, depois-o
controla a saída, quais informações serão mostradas sobre cada processo. Estou escolhendopid
,user
,cmd
(a linha de comando) estate
, que é o estado do processo .De
man ps
:então, finalmente, eu o canalizo para o
grep T$
que diz, mostre-me todos os processos que têm T na última coluna.E então eu tenho uma boa lista de todos os processos de diferentes usuários que estão no estado parado.
Se você deseja remover alguns trabalhos interrompidos, mas não todos, tente isto:
Primeiro, liste os trabalhos, você obterá algo assim:
enviar kill para um trabalho interrompido, ele não fará nada além de enfileirar do que trazê-lo em primeiro plano, ele terminará