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 fjx
den 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 yad
als Unterprozess von sehen /bin/bash
, wenn ich es schließe yad
, ändert sich sleep 60
in 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 9411
in 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 bash
Subshell, 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 yad
dass der grep
Prozess selbst in der Ergebnisliste angezeigt wird.
Wenn Sie das Terminal noch geöffnet haben
bash
Stellt 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 jobs
integrierten 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 10
Job zu töten :
kill %2 # or
kill %+ # or
kill %
top
den Vorgang auch abbrechenk
, indem Sie drücken , die PID eingeben und dann zweimal die Eingabetaste drücken.Die
&
machen das Terminal einen neuen Prozess erstellen und den Code im Innern zu laufen bekommen. So wird Ihr Code unabhängig vom Terminalprozess. Selbst wenn Sie das Terminal schließen, wird der neue Prozess, in dem Ihr Code ausgeführt wird, nicht angehalten. Also entweder entfernen&
oder tunps -aux
, suchen Sie Ihren Prozess und beenden Sie ihnkill (process id)
.quelle
Normalerweise bg für Hintergrund fg für Vordergrund. Wenn Sie & symbol use fg verwenden, wird das aktuell ausgeführte Programm angezeigt. Drücken Sie Strg + C , um den Vorgang abzubrechen.
quelle
bg
/fg
funktioniert nicht, wenn das Terminal nicht mehr verbunden istbash
. Wäre nicht in der Lage, eine erneute Verbindung herzustellen,reptyr
dabash
untergeordnete Prozesse (sleep
) vorhanden sind.