cmdsubst>
ist die sekundäre Eingabeaufforderung, die von der zsh
Shell 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 zsh
Sie aufgefordert, diese $(...)
Befehlsersetzung zu schließen ?
Noch ein paar Anmerkungen:
- Die Ausgabe von
lsof
wird 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
-t
Optionen verwenden lsof
:lsof -ti:8080 | tail -n2
kill -9
ist 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 ps
Implementierung voraus , die die lstart
Spalte 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
?