cmdsubst>ist die sekundäre Eingabeaufforderung, die von der zshShell ausgegeben wird, wenn sie auf das Ende einer eingegebenen Befehlsersetzung wartet.
Wenn Sie diese Eingabeaufforderung erst nach der Eingabe erhalten killl<Return>, ist die einzige vernünftige Erklärung, dass Sie einen Alias (eine Art Zeichenfolgenmakroerweiterung) haben killl, der sich zu etwas erweitert, das eine nicht abgeschlossene $(...)Befehlsersetzung enthält , wie:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Wo werden zshSie aufgefordert, diese $(...)Befehlsersetzung zu schließen ?
Noch ein paar Anmerkungen:
- Die Ausgabe von
lsofwird nach pid sortiert. PID-Nummern werden umgebrochen, eine größere PID ist keine Garantie dafür, dass der Prozess später gestartet wurde.
-i:8080 meldet TCP- oder UDP-Sockets, die den 8080-Port als Quell- oder Zielport haben, unabhängig davon, ob es sich um einen empfangsbereiten, akzeptierenden oder verbindenden Socket handelt.
- Wenn Sie nur die PID erhalten möchten, können Sie die folgenden
-tOptionen verwenden lsof:lsof -ti:8080 | tail -n2
kill -9ist kill -s KILL, was ein Signal sendet, dass die Anwendung nicht ordnungsgemäß beenden kann. Es sollte nur als letztes Mittel verwendet werden.
Um den zuletzt gestarteten Prozess abzubrechen, der eine Socket-Bindung (eines der Enden) an Port 8080 aufweist, können Sie Folgendes ausführen:
#! /bin/sh -
unset IFS
pids=$(lsof -ti:8080) &&
LC_ALL=C ps -o pid=,lstart= -p $pids |
LC_ALL=C sort -k6,6n -k4,4M -k3,3n -k5,5 -k1,1n |
awk 'END{system("kill " $1)}'
(setzt GNU sort(wie unter macOS) und eine psImplementierung voraus , die die lstartSpalte unterstützt (wie bei macOS und procps-ng, obwohl der Code für procps-ng, bei dem die Felder month und day ausgetauscht werden, aktualisiert werden müsste)).
killl?