cmdsubst>
es la solicitud secundaria impresa por el zsh
shell 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) killl
que 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 zsh
está pidiendo que cierre esa $(...)
sustitución de comando?
Algunas notas más:
- la salida de
lsof
se 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
-t
opción de lsof
:lsof -ti:8080 | tail -n2
kill -9
es 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 ps
implementación que admite la lstart
columna (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
?