Linux: kill Hintergrundaufgabe
-
06-07-2019 - |
Frage
Wie kann ich die letzte gelaicht Hintergrundaufgabe in Linux töten?
Beispiel:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Lösung
Es gibt eine spezielle Variable für diesen in bash:
kill $!
$! dehnt sich auf den PID des letzten Prozesses im Hintergrund ausgeführt wird.
Andere Tipps
Sie können durch Auftragsnummer töten. Wenn Sie eine Aufgabe in den Hintergrund gestellt werden Sie so etwas wie sehen:
$ ./script &
[1] 35341
Das [1]
ist die Auftragsnummer und kann wie verwiesen werden:
$ kill %1
$ kill %% # Most recent background job
Um eine Liste von Auftragsnummern finden Sie in den jobs
Befehl verwenden. Mehr von man bash
:
Es gibt eine Reihe von Möglichkeiten, um einen Job in der Schale zu verweisen. Der Charakter
%
führt einen Jobnamen ein. Auftragsnummern
können bezeichnet als%n
. Ein Job auch bezeichnet werden kann verwendet, um einen Präfix des Namen zu verwenden, es zu starten, oder mit einer Teilkette, dass erscheint in seinem Befehlszeile. Zum Beispiel bezieht sich%ce
zu einem gestopptence
Job. Wenn ein Präfix mehr als einen Job übereinstimmt, bash meldet einen Fehler. Verwendung%?ce
, andererseits bezieht sich auf jede Aufgabe, den Zeichenfolgece
in seiner Befehlszeile enthält. wenn die String entspricht mehr als ein Job, bash meldet einen Fehler. Die Symbole%%
und%+
auf den Begriff der Shell beziehen des aktuellen Auftrags, die der letzte Job ist gestoppt, während es in den Vordergrund oder begann im Hintergrund war. Die bisherige Arbeit kann wird unter Verwendung von%-
verwiesen. In Ausgabe an Arbeitsplätzen betreffen (zum Beispiel die Ausgabe des Jobs-Befehl), ist der aktuelle Job immer mit einem+
gekennzeichnet, und dem vorherigen Job mit einem-
. Ein einzelner%
(ohne begleitende Auftragsspezifikation) bezieht sich auch auf die aktuelle Job.
Der folgende Befehl gibt Ihnen eine Liste aller Hintergrundprozesse in der Sitzung zusammen mit der pid. Sie können es dann verwenden, um den Prozess zu beenden.
jobs -l
Beispiel Nutzung:
$ sleep 300 &
$ jobs -l
[1]+ 31139 Running sleep 300 &
$ kill 31139
Dies sollte alle Hintergrundprozesse beenden:
jobs -p | xargs kill -9
skill doB
skill
ist eine Version des Kill-Befehl, den Sie einen oder mehrere Prozesse auf einem bestimmten Kriterien auswählen können.
Sie müssen seine pid ... verwenden "ps -A" zu finden ist.
Dies ist ein Thema aus Antwort, aber für diejenigen, die daran interessiert sind, es vielleicht wertvoll.
Wie in @John Kugelman Antwort,% auf Auftragsspezifikation bezogen. , wie effizient das finden? verwenden weniger u Muster Befehl , Mann weniger Pager verwenden scheint (nicht sicher), in man bash Art &% geben Sie dann nur zeigen Linien eingeben werden, die, ‚%‘ enthält alle bis wieder aufführen, geben Sie &. Geben Sie dann.
Verwenden Sie einfach den Befehl killall:
killall Taskname
für weitere Informationen und erweiterte Optionen, Typ "Mann killall".