Ho iniziato
while true; do yad; sleep 60; done &
e chiuso il terminale per testarlo, ora ho avuto lo stesso problema.
Se hai già chiuso il terminale hai iniziato il loop in
Diamo una panoramica dei processi in esecuzione con ps fjx, le ultime righe sulla mia macchina leggere
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)
Puoi vedere yadcome un sottoprocesso di /bin/bash, se lo chiudo yadcambia sleep 60in nell'output di ps. Se la visualizzazione ad albero è troppo confusa, puoi anche cercare l'output come segue 1 :
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
Le righe di output iniziano con due numeri, il primo è il PPID, l'ID processo del processo padre e il secondo è il PID, l'ID del processo stesso. È per questo che 9411appare in entrambe le righe qui:
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
Questa è la bashsubshell che vogliamo uccidere e abbiamo appena scoperto il suo PID, quindi ora tutto ciò che rimane è semplice
kill 9411 # replace 9411 with the PID you found out!
e la fastidiosa subshell è andata per sempre.
1 : la notazione in quanto grep "[y]ad"invece semplicemente grep yadimpedisce al grepprocesso stesso di comparire nell'elenco dei risultati.
Se il terminale è ancora aperto
bashfornisce la variabile $!, che "si espande nell'ID del processo del lavoro più recentemente inserito in background", quindi ciò che segue uccide solo l'ultimo processo in background:
kill $!
Se non è il processo più recente, è possibile ottenere un elenco di processi in esecuzione con l' jobsintegrato, ad esempio output:
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
Ci sono due lavori nella lista dei lavori, per uccidere uno di essi è possibile accedervi con il numero del lavoro o le scorciatoie %, %+("lavoro corrente") e %-("lavoro precedente"), ad esempio per terminare il ciclo in esecuzione in background potrebbe fare
kill %1 # or
kill %-
e per terminare il sleep 10lavoro sospeso :
kill %2 # or
kill %+ # or
kill %
topper terminare il processo premendok, quindi immettendo il PID, quindi premendo due volte Invio.