ich begann
while true; do yad; sleep 60; done &
und schloss das Terminal, um es zu testen, jetzt habe ich das gleiche Problem.
Wenn Sie das Terminal bereits geschlossen haben, haben Sie die Schleife gestartet
Lassen Sie uns einen Überblick über laufende Prozesse mit ps fjxden letzten Zeilen auf meinem Rechner lesen
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)
Sie können yadals Unterprozess von sehen /bin/bash, wenn ich es schließe yad, ändert sich sleep 60in der Ausgabe von ps. Wenn die Baumansicht zu verwirrend ist, können Sie die Ausgabe auch wie folgt durchsuchen 1 :
ps fjx | grep "[y]ad" # or respectively
ps fjx | grep "[s]leep 60"
Die Ausgabezeilen beginnen mit zwei Zahlen, wobei die erste die PPID, die Prozess-ID des übergeordneten Prozesses und die zweite die PID, die ID des Prozesses selbst, ist. Das liegt daran, dass hier 9411in beiden Zeilen angezeigt wird:
2226 9411 9411 8383 ? -1 S 1000 0:00 \_ /bin/bash
9411 17674 9411 8383 ? -1 Sl 1000 0:00 \_ yad
Das ist die bashSubshell, die wir töten wollen, und wir haben gerade ihre PID herausgefunden. Jetzt ist alles, was übrig bleibt, eine einfache
kill 9411 # replace 9411 with the PID you found out!
und die nervige Unterschale ist endgültig weg.
1 : Die Notation verhindert grep "[y]ad"lediglich, grep yaddass der grepProzess selbst in der Ergebnisliste angezeigt wird.
Wenn Sie das Terminal noch geöffnet haben
bashStellt die Variable bereit $!, die "auf die Prozess-ID des zuletzt in den Hintergrund gestellten Jobs erweitert", sodass im Folgenden nur der letzte Prozess im Hintergrund abgebrochen wird:
kill $!
Wenn dies nicht der neueste Prozess ist, können Sie einfach eine Liste der ausgeführten Jobs mit der jobsintegrierten Beispielausgabe abrufen:
[1]- Running while true; do
yad; sleep 60;
done &
[2]+ Stopped sleep 10
Es gibt zwei Aufträge in der Auftragsliste, einen von ihnen zu töten Sie es mit der Auftragsnummer oder den Verknüpfungen zugreifen können %, %+( „current job“) und %-( „vorherigen Job“), zB um die Schleife zu töten im Hintergrund laufen Sie tun könnte
kill %1 # or
kill %-
und um den suspendierten sleep 10Job zu töten :
kill %2 # or
kill %+ # or
kill %
topden Vorgang auch abbrechenk, indem Sie drücken , die PID eingeben und dann zweimal die Eingabetaste drücken.