Wie bricht man einen Prozess mit einem einzigen Befehl ab?

18

Ich möchte einen Prozess beenden, nachdem ich die ID in einem einzigen Schritt gefunden habe.

Ich benutze derzeit diese beiden Befehle:

pidof <name>
kill <#number_which_is_result_of_command>

Wie kann ich einen einzelnen Befehl schreiben, um dies zu tun?

Cuil Yahoo
quelle
Was ist die Hölle? bash? tcsh? ...?
Levon
2
Sie können in der Dokumentation Ihrer Shell nach einer Befehlsersetzung suchen .
Deviantkarot
2
Ich töte Dinge visuell mit: xkill. Geben Sie xkill einfach im Terminal, bewegen Sie den Cursor auf die säumige App und drücken Sie die button.Gone
1
@arochester Das funktioniert, ist aber auf GUI-Umgebungen beschränkt. Die killverschiedenen Befehle werden über die Konsole ausgeführt (und können in Skripten usw. automatisiert werden). Immer noch gut, um die Menschen auf die xkillOption aufmerksam zu machen .
Levon
Wenn eine der nachstehenden Antworten Ihr Problem gelöst hat, können Sie es akzeptieren, indem Sie auf das Häkchen neben der Antwort klicken . Es wird beide Parteien mit einigen Wiederholungspunkten belohnen und dieses Problem als gelöst markieren.
Levon

Antworten:

18

Sie können Prozesse auch nach Namen beenden:

Beispiel:

pkill vim  # kill all processes containing vim in the process name
fromnaboo
quelle
@Levon Bist du sicher? Hinweis: Wird es funktionieren , wenn Sie ändern pkillzu kill?
Mikel
Es wird nicht funktionieren, Levon. kill -9 beendet den Prozess anhand seiner PID und pkill -9 beendet den Prozess anhand seines Namens.
fromnaboo
6
Ohne -ooder -nwerden pkillauch alle übereinstimmenden Prozesse beendet, nicht nur einer.
Mikel
3
-1 für den Vorschlag, SIGKILL (-9) zu verwenden, was eine schlechte Prozessökologie ist. Mit SIGKILL werden Daten innerhalb des Prozesses nicht gelöscht, wodurch möglicherweise Daten beschädigt werden.
Arcege
6
Vorschlagen killallist SEHR SCHLECHT. Es macht sehr unterschiedliche Dinge, je nachdem, auf welchem ​​Unix / Linux Sie sich befinden.
MikeyB
13

Verwenden Sie zur Beantwortung Ihrer spezifischen Frage mit Ihrem Befehlssatz:

kill `pidof <name>`

Da pidof <name>Ihnen die PID des Prozesses angezeigt wird, den Sie beenden möchten, können Sie sie auch mit Befehlszeilenschaltern wie -9etc verwenden.

Getestet mit bashund tcsh.

Levon
quelle
9
BTW kill $(pidof <name>)ist kompatibler (POSIX) und kann innerhalb eines anderen Befehlsersetzungsblocks verwendet werden .
Rudolf Adamkovic
@RudolfAdamkovic Ich stimme zu, das ist eine bessere Option, sicher in Skripten. Für einen schnell getippten Befehl finde ich die Verwendung der Backticks jedoch einfacher. Außerdem funktioniert es mit beiden gängigen Shells (bash und tcsh). Ich konnte die $Version nicht für die Arbeit mit tcsh bekommen.
Levon
Einfach tcshmal probiert mit und du hast recht. Wusste das nicht. Danke für die Information!
Rudolf Adamkovic
7

Sollte ein Kommentar zu Levon's sein, aber mir fehlt der Repräsentant hier, um dies zu tun:

Riffing auf der Diskussion in der akzeptierten Antwort auf diese Frage: /server/397762/how-to-make-folders-00-99-with-a-single-command-in-ubuntu

Ich würde sagen, dass es vorzuziehen sein könnte (oder zumindest für spätere Sucher nützlicher / klarer) zu laufen

kill $(pidof <name>)

Weitere Referenz zu $ ​​() vs. ``: http://mywiki.wooledge.org/BashFAQ/082

Ghillie Dhu
quelle
+1 für das Einbinden des unteren Links. Ich habe einen ähnlichen Kommentar von @RudolfAdamkovic erhalten, siehe meine Antwort auf ihn. Kennen Sie eine Version davon, die mit tcsh funktioniert? (Ich finde Backticks immer noch einfacher, wenn ich einen schnellen Befehl in der Shell eingebe :)
Levon
Ich habe nur mit bash (unter Linux) und ksh (unter HP-UX) gearbeitet. Tut mir leid, ich habe noch keine Wege mit tcsh gekreuzt.
Ghillie Dhu
1

Sie können den killallBefehl auch verwenden , um den bestimmten Prozess abzubrechen.

killall vim
Karthikeyan.RS
quelle