¿Bash script para encontrar y eliminar un proceso con ciertos argumentos?


17

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)


¿Ver alternativas pgrep y pkill en mac os x? . pgrepy pkillson comandos para buscar o eliminar de manera confiable procesos por nombre en Solaris y Linux.
Gilles 'SO- deja de ser malvado'

Respuestas:


26

Ejecute pgrep -f "ssh.*-D"y vea si eso devuelve la ID de proceso correcta. Si lo hace, sólo tiene que cambiar pgrepa pkilly tener las mismas opciones y patrón

Ademá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 uso kill -9después de intentarlo primero -1 -2y -3.


debes redefinir kill como un forbucle que lo hace kill -ipara cada uno i;)
Seamus

1
pgrepno es nativo en OSX, debe obtenerlo de un tercero. El hilo anterior sobre el tema tiene propuestas y alternativas.
Gilles 'SO- deja de ser malvado'

hombre vivo, cuanto más uso 'nix, más me encanta :) gracias por esto!
javamonkey79

pgrep y pkill están disponibles en OS X 10.8 (Mountain Lion) y versiones posteriores. apple.blogoverflow.com/2012/07/…
Peter Hanley

Puede ser útil agregar el -aindicador al pgrepque 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.
luator


0

Puede aprovechar el sistema de archivos proc para recopilar la información. Por ejemplo:

for proc in $(grep -irl "ssh.*-D" /proc/*/cmdline | grep -v "self"); do if [ -f $proc ]; then cat $proc && echo ""; fi; done

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.


1
OSX no tiene /proc. Y ya existe una herramienta robusta para hacer esto, llamada pgrep(disponible de forma nativa al menos en Solaris y Linux).
Gilles 'SO- deja de ser malvado'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.