cmdsubst>
est l'invite secondaire imprimée par le zsh
shell lorsqu'il attend la fin d'une substitution de commande en cours de saisie.
Si vous obtenez cette invite après avoir simplement entré killl<Return>
, la seule explication raisonnable est que vous avez un alias (qui est une forme d'extension de macro de chaîne) pour killl
qu'il se développe en quelque chose qui contient une $(...)
substitution de commande non terminée , comme:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
Où zsh
vous demande de fermer cette $(...)
substitution de commande.
Quelques notes supplémentaires:
- la sortie de
lsof
est triée par pid. les numéros pid sont encapsulés, un pid plus grand ne garantit pas que le processus a été démarré plus tard.
-i:8080
signalera les sockets TCP ou UDP dont le port 8080 est le port source ou de destination, qu'il s'agisse d'un socket d'écoute, d'acceptation ou de connexion.
- Si vous souhaitez obtenir le pid uniquement, vous pouvez utiliser l'
-t
option de lsof
:lsof -ti:8080 | tail -n2
kill -9
est kill -s KILL
, ce qui envoie un signal que l'application ne peut pas agir pour se terminer normalement. Il ne doit être utilisé qu'en dernier recours.
Pour tuer le processus démarré le plus récemment qui a un socket lié (l'une ou l'autre extrémité) sur le port 8080, vous pouvez faire:
#! /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)}'
(suppose GNU sort
(comme on le trouve sur macOS) et une ps
implémentation qui prend en charge la lstart
colonne (comme macOS et procps-ng, bien que le code devrait être mis à jour pour procps-ng où les champs mois et jour sont échangés)).
killl
?