cmdsubst>es la solicitud secundaria impresa por el zshshell cuando está esperando que se ingrese el final de una sustitución de comando.
Si obtiene ese mensaje después de ingresar killl<Return>, la única explicación razonable es que tiene un alias (que es una forma de expansión de macro de cadena) killlque se expande a algo que contiene una $(...)sustitución de comando no terminada , como:
$ alias 'killl=echo $(lsof -ti'
$ killl :22
cmdsubst>
¿Dónde le zshestá pidiendo que cierre esa $(...)sustitución de comando?
Algunas notas más:
- la salida de
lsofse ordena por pid. los números pid están envueltos, un pid más grande no es garantía de que el proceso se inició más tarde.
-i:8080 informará los sockets TCP o UDP que tienen el puerto 8080 como puerto de origen o destino, ya sea un socket de escucha, de aceptación o de conexión.
- Si solo quieres obtener el pid, puedes usar la
-topción de lsof:lsof -ti:8080 | tail -n2
kill -9es decir kill -s KILL, que envía una señal de que la aplicación no puede actuar para salir con gracia. Solo debe usarse como último recurso.
Para eliminar el proceso iniciado más recientemente que tiene un socket vinculado (cualquier extremo) en el puerto 8080, puede hacer:
#! /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)}'
(asume GNU sort(como se encuentra en macOS) y una psimplementación que admite la lstartcolumna (como macOS 'y procps-ng, aunque el código tendría que actualizarse para procps-ng donde se intercambian los campos de mes y día)).
killl?