eu comecei
while true; do yad; sleep 60; done &
e fechou o terminal para testá-lo, agora tenho o mesmo problema.
Se você já fechou o terminal, você iniciou o loop
Vamos obter uma visão geral dos processos em execução com ps fjx
, as últimas linhas da minha máquina lidas
2226 11606 11606 19337 ? -1 S 1000 0:00 \_ /bin/bash
11606 22485 11606 19337 ? -1 S 1000 0:00 | \_ sleep 10
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
1 2215 2215 2215 ? -1 Ss 1000 0:00 /lib/systemd/systemd --user
2215 2216 2215 2215 ? -1 S 1000 0:00 \_ (sd-pam)
Você pode ver yad
como um subprocesso de /bin/bash
, se eu fechar yad
, ele será alterado para sleep 60
na saída de ps
. Se a visão em árvore é muito confusa, você também pode pesquisar a saída como segue 1 :
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
As linhas de saída começam com dois números, sendo o primeiro o PPID, o ID do processo pai e o segundo o PID, o ID do próprio processo. É por causa disso que 9411
aparece nas duas linhas aqui:
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
Esse é o subgrupo bash
que queremos matar e acabamos de descobrir o seu PID, então agora tudo o que resta é simples
kill 9411 # replace 9411 with the PID you found out!
e a subchave irritante se foi para sempre.
1 : A notação como grep "[y]ad"
em vez de simplesmente grep yad
impede que o processo grep
apareça na lista de resultados.
Se você ainda tiver o terminal aberto
bash
fornece a variável $!
, que "se expande para o ID do processo do trabalho colocado mais recentemente em segundo plano", portanto, o seguinte apenas mata o processo mais recente em segundo plano:
kill $!
Se não for o processo mais recente, só poderá obter uma lista de tarefas em execução com a saída de exemplo jobs
builtin:
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
Existem dois trabalhos na lista de trabalhos, para eliminar um deles, você pode acessá-lo com o número do trabalho ou com os atalhos %
, %+
(“trabalho atual”) e %-
(“trabalho anterior”) ), por exemplo para matar o loop em execução no fundo que você poderia fazer
kill %1 # or
kill %-
e para matar o trabalho sleep 10
suspenso:
kill %2 # or
kill %+ # or
kill %