it-swarm.com.de

Kann ich pgrep mit kill verketten?

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

$ pgrep name
5089
5105

Und mehrere Argumente scheinen mit kill zu funktionieren:

Sudo kill 5089 5105

Das ist aber falsch:

pgrep name | kill

Wie macht man das richtig?

Versuche dies:

pgrep name | xargs kill

Wenn du benutzt pgrep name | kill, die Ausgabe von pgrep name ist ein Feed zu stdin von kill. Da kill keine Argumente von stdin liest, funktioniert dies nicht.

Mit xargs werden Argumente für kill aus stdin erstellt. Beispiel:

$ pgrep bash | xargs echo
5514 22298 23079
46
cuonglm

Das sollte funktionieren:

pkill name

Ich schlage auch vor, die Manpage zu lesen.

Um eher das Allgemeine als das Spezifische zu beantworten ...

Pipes dienen zum Übergeben der Ausgabe eines Programms als Eingabe an ein anderes Programm.

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

Verwenden Sie dazu Befehlssubstitution .

Zum Beispiel, wenn Sie ausführen möchten

Sudo kill 5089 5105

Und du hast einen Befehl pgrep name das gibt 5089 5105

Sie setzen sie wie zusammen

Sudo kill $(pgrep name)
5
Mikel