Quiero un script que elimine las instancias de las ssh
cuales se ejecutan con el argumento -D (configurando un proxy local).
Manualmente, ps -A | grep -i ssh
busco las instancias con -D y kill -9 {id}
cada una.
Pero, ¿cómo se ve eso en forma de script bash?
(Estoy en Mac OS X pero instalaré todos los comandos necesarios mediante port
)
pgrep
ypkill
son comandos para buscar o eliminar de manera confiable procesos por nombre en Solaris y Linux.Respuestas:
Ejecute
pgrep -f "ssh.*-D"
y vea si eso devuelve la ID de proceso correcta. Si lo hace, sólo tiene que cambiarpgrep
apkill
y tener las mismas opciones y patrónAdemás, no debe usar
kill -9
también conocido como SIGKILL a menos que sea absolutamente necesario porque los programas no pueden atrapar a SIGKILL para que se limpien antes de salir. Solo lo usokill -9
después de intentarlo primero-1
-2
y-3
.fuente
for
bucle que lo hacekill -i
para cada unoi
;)pgrep
no es nativo en OSX, debe obtenerlo de un tercero. El hilo anterior sobre el tema tiene propuestas y alternativas.-a
indicador alpgrep
que hace que se imprima no solo la identificación del proceso sino también el comando (incluidos los argumentos). De esta manera, es muy fácil verificar que solo los procesos deseados coincidan.También,
fuente
pkill
Puede aprovechar el sistema de archivos proc para recopilar la información. Por ejemplo:
No es perfecto, querrás una expresión regular más exclusiva (especialmente si estás eliminando procesos) pero
echo $proc | awk -F'/' '{ print $3 }'
te mostrará el PID de los procesos.fuente
/proc
. Y ya existe una herramienta robusta para hacer esto, llamadapgrep
(disponible de forma nativa al menos en Solaris y Linux).