Kann ich pgrep mit kill verketten?


31

Ich habe bemerkt, dass |verwendet wird, um Ergebnisse des ersten Befehls an den anderen zu senden. Ich möchte alle Prozesse beenden, die einem Namen entsprechen.
Das macht pgrep normalerweise:

$ pgrep name
5089
5105

Und mehrere Argumente scheinen zu funktionieren kill:

sudo kill 5089 5105

Das ist aber falsch:

pgrep name | kill

Also, wie macht man das richtig?


3
pkill. Und wenn das nicht gäbe, kill $(pgrep ...).
Mikel

Ich habe nicht nur nach diesen spezifischen Befehlen gefragt, sondern auch, um ein besseres Verständnis der Befehlskettung zu erhalten. Aber wie ich aus der Punktzahl der Fragen ersehen kann, sind Fragen, die verstanden werden sollen, unerwünscht ...
Tomáš Zato - Reinstate Monica

Wenn Sie die Frage allgemeiner formulieren möchten und sicherstellen möchten, dass es sich nicht um ein Duplikat handelt, kann ich darüber abstimmen.
Mikel

Entschuldigung, habe versehentlich meinen vorherigen Kommentar gelöscht. Ich bin auf einem Tablet und diese Seite hat wirklich kleine Buttons nebeneinander.
Mikel

Ich habe nur gesagt, dass ich abgelehnt habe, weil Ihre Frage nichts zu fragen schien, woraus Sie nicht gelernt haben könnten man pgrep. Der Downvote-Button zeigt an, dass für eine Frage keine Nachforschungen anstehen und ich in Ihrer Frage keine gefunden habe. Tut mir leid, wenn das hart schien.
Mikel

Antworten:


42

Versuche dies:

pgrep name | xargs kill

Wenn Sie verwenden pgrep name | kill, wird die Ausgabe von pgrep nameauf stdin von eingespeist kill. Da killstdin keine Argumente liest, funktioniert dies nicht.

Mit xargswird Argumente für killfrom stdin erzeugt. Beispiel:

$ pgrep bash | xargs echo
5514 22298 23079

5
Nichts mit Leerzeichen oder Zeilenumbruch zu tun. Einfach weil kill keine Argumente auf stdin liest.
Mikel

@Mikel: Mein Fehler, behoben.
Donnerstag,


5

Um eher auf das Allgemeine als auf das Besondere zu antworten ...

Pipes dienen dazu, die Ausgabe eines Programms als Eingabe an ein anderes Programm weiterzuleiten.

Es sieht so aus, als würden Sie versuchen, die Ausgabe eines Programms als Befehlszeilenargumente für ein anderes Programm zu verwenden.

Verwenden Sie dazu die Befehlssubstitution .

Zum Beispiel, wenn Sie ausführen möchten

sudo kill 5089 5105

Und Sie haben einen Befehl pgrep name, der ausgibt5089 5105

Sie setzen sie gerne zusammen

sudo kill $(pgrep name)

Vielen Dank. Ich hoffe das wird auch anderen Anfängern helfen.
Tomáš Zato - Wiedereinsetzung von Monica am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.