Quiero un script que elimine las instancias de las sshcuales se ejecutan con el argumento -D (configurando un proxy local).
Manualmente, ps -A | grep -i sshbusco 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)

pgrepypkillson 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 cambiarpgrepapkilly tener las mismas opciones y patrónAdemás, no debe usar
kill -9tambié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 -9después de intentarlo primero-1-2y-3.fuente
forbucle que lo hacekill -ipara cada unoi;)pgrepno es nativo en OSX, debe obtenerlo de un tercero. El hilo anterior sobre el tema tiene propuestas y alternativas.-aindicador alpgrepque 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
pkillPuede 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).