cmdsubst>est l'invite secondaire imprimée par le zshshell 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 killlqu'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ù zshvous demande de fermer cette $(...)substitution de commande.
Quelques notes supplémentaires:
- la sortie de
lsofest 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'
-toption de lsof:lsof -ti:8080 | tail -n2
kill -9est 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 psimplémentation qui prend en charge la lstartcolonne (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?