Kann ich pgrep mit kill ketten?

Kann ich pgrep mit kill ketten?

Mir ist aufgefallen, dass dies |dazu verwendet wird, die Ergebnisse des ersten Befehls an den nächsten 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 mit kill:

sudo kill 5089 5105

Das ist aber falsch:

pgrep name | kill

Wie macht man es also richtig?

Antwort1

Versuche dies:

pgrep name | xargs kill

Wenn Sie verwenden pgrep name | kill, wird die Ausgabe von pgrep namean die Standardeingabe von weitergeleitet kill. Da killkeine Argumente von der Standardeingabe gelesen werden, funktioniert dies nicht.

Mit xargswerden Argumente für killaus stdin erstellt. Beispiel:

$ pgrep bash | xargs echo
5514 22298 23079

Antwort2

Das sollte funktionieren:

pkill name

Ich empfehle außerdem, die Manpage zu lesen.

Antwort3

Um eher allgemein als spezifisch zu antworten …

Pipes dienen zur Weitergabe der Ausgabe eines Programms alsEingangzu einem anderen Programm.

Es sieht so aus, als ob Sie versuchen, die Ausgabe eines Programms zu verwenden alsKommandozeilenargumentezu einem anderen Programm, das anders ist.

Verwenden Sie dazuBefehlsersetzung.

Wenn Sie beispielsweise

sudo kill 5089 5105

Und Sie haben einen Befehl pgrep name, der ausgibt5089 5105

Man setzt sie zusammen wie

sudo kill $(pgrep name)

verwandte Informationen