Haben Sie bemerkt, dass Sie in den beiden Versuchen zwei verschiedene PIDs erhalten haben?
Beachten Sie Folgendes: Wenn Sie einen Befehl wie vi raven.txt
eingeben, ps ax
wird eine Zeile mit einem Befehl von angezeigt vi raven.txt
. Wenn Sie einen Befehl wie grep snappr
eingeben, ps ax
wird eine Zeile angezeigt, in der ein Befehl von angezeigt wird grep snappr
. Und wenn Sie die Ausgabe davon ps
weiterleiten grep snappr
, grep
wird der die Zeile finden , die sich selbst beschreibt . Also, wenn du tippst
$ ps ax | grep snappr | awk ''
Wiederholt wird jedes Mal eine andere Zahl gedruckt (da die PID-Nummer gedruckt grep
wird und Sie grep
jedes Mal einen neuen, eindeutigen Prozess erhalten, wenn Sie den Befehl ausführen).
Bedenken Sie abschließend: Der kill
Befehl kann erst ausgeführt werden, wenn seine Argumente bekannt sind. Damit das Argument bekannt ist, $(ps ax | grep snappr | awk '')
muss die Pipeline abgeschlossen sein. Dies bedeutet, dass der grep
Most 1 beendet sein muss . Daher kill
erhält das System die PID des grep
Prozesses, jedoch erst, nachdem der grep
Prozess beendet wurde - daher meldet es natürlich "Kein solcher Prozess".
Vielleicht hätte ich erwähnen sollen, dass kein snappr
Prozess läuft. Wenn ja, würde Ihr erster Befehl zwei Zahlen ausgeben: die PID von snappr
und die PID von grep snappr
. Wenn Sie jetzt snappr
ausgeführt werden, wird Ihr Befehl möglicherweise halb korrekt ausgeführt. Damit meine ich, dass er das tut, was Sie möchten, aber es wird auch eine Fehlermeldung angezeigt. Wenn das snappr
mit der PID 42097 und grep snappr
mit der PID 70848 ausgeführt wird, lautet der kill
Befehl kill 42097 70858
, der den Befehl beendet snappr
und eine Fehlermeldung ausgibt, wenn versucht wird, den grep
nicht mehr vorhandenen Prozess abzubrechen .
Sie möchten dies wahrscheinlich verbessern. Meine Lieblings - Weg, die ich vor 20 Jahren erfunden, um es zu ändern das grep
zu grep "[s]nappr"
, was dem Betrag entspricht, snappr
aber wird sich nicht überein. Ein anderer Ansatz ist pgrep
eher zu verwenden als ps | grep
.
1 Alternativ awk
könnte das auch beendet werden, wenn das grep
System lediglich geschlossen wird. Dies wäre ein sehr ungewöhnliches Verhalten für ein * nix-Programm.