Script de shell para matar a -9 según el nombre

28

¿Hay alguna manera (tal vez un script) de cómo automatizar este proceso:

petr@sova:~$ ps -ef | grep middleman
petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
petr@sova:~$ kill -9 18445

Desafortunadamente, pkilles demasiado débil ya que tengo que ir con la -9opción activada kill.

mreq
fuente
2
Se puede utilizar -9con pkilldemasiado ...
Dejar de dañar Mónica
66
En mi opinión, es más elegante y apropiado de usar -KILLque -9. Qué número corresponde a qué señal depende de la implementación. SIGKILLresulta estar 9en Linux i386 y Linux amd64, pero no necesariamente en todas partes. ( Más información aquí. )
Eliah Kagan
55
@EliahKagan: aunque también me gusta usarlo -KILL(porque hace que el código sea más legible), cabe señalar que SIGKILL = 9está especificado por POSIX , por lo que -9es bastante portátil hoy en día (y no depende de núcleos o arquitecturas).
Andrea Corbellini

Respuestas:

36

Puede usar su shell para hacer esta tarea por usted:

kill -9 $(pidof middleman)

El shell ejecuta el comando pidof middlemanprimero. La salida de pidof (8) es la identificación del proceso. Por lo tanto, el shell sustituye el pidofcomando -con la identificación del proceso y se ejecuta kill -9 18845(o lo que sea la identificación correcta del proceso).

qbi
fuente
¿Cuál es la diferencia entre esto y kill -9 $(pgrep middleman)?
Aaron Franke
54

Existe una solución aún más simple que la de qbi: eliminemos killalllos procesos por nombre y puede especificar señales.

killall -9 middleman

Consulte man killallpara obtener más información y opciones adicionales (hay bastantes).

Como su nombre lo indica, esto envía la señal a todos los procesos nombrados middleman. Pero eso no es diferente de otras formas (como pkill). Por otra parte, pkill -9 middlemanse centrará en los procesos cuyo nombre partido, pero no son iguales middleman, como por ejemplo middleman2, también.

Gerhard Burger
fuente
2
killall¡por la victoria!
Andrea Corbellini
44
matar a todos los intermediarios? oh querido ...
Tobias Kienzler
16

Las otras respuestas son completamente correctas, pero también podría agregar una tercera opción para que todas estén documentadas aquí. También puedes usar:

pkill -9 middleman

Consulte man pkillpara obtener más información y opciones adicionales.

Realmente no importa cuál de estos métodos uses. Todos trabajarán. Pero conocer las opciones es útil si desea modificar el comportamiento de alguna manera, ya que las páginas man correspondientes muestran qué otras opciones coincidentes están disponibles.

Robie Basak
fuente
Extraño, no funciona aquí. Tampocomiddleman*
mreq
1
Ah Mirando más de cerca, parece probable que quieras matar a un intérprete de rubí, en lugar de un proceso realmente llamado middleman. Aquí es donde las diferencias en cómo exactamente pkill, killall, pidofy greplos procesos de los partidos comienzan realmente a la materia!
Robie Basak
12
pkill -9 -f middleman

La -fopción hace que coincida con la línea de comando completa, en lugar de solo el nombre del proceso.

Tenga en cuenta que -9debería ser una señal de último recurso, no algo para usar de forma rutinaria.

jlliagre
fuente
1
¡Gracias! Realmente me gusta la capacidad de igualar elcomplete command line
cwd
línea de comando completa es realmente genial!
okwap
10

Solo por diversión, me gustaría agregar una forma más manual, de la vieja escuela

kill -9 `ps aux | grep middleman | awk '{print $2}'`
slipset
fuente
1
Lo hice en el trabajo hace unos años y el administrador me dio una mirada que decía "está bien, abuelo". También puede agregar un grep -v grep antes del awk para asegurarse de que no elimine el comando grep también.
Iain Holder
@gerhard, gracias por la edición, no pude encontrar los ticks en mi iPad. grep -v es una buena idea ...
slipset
La verdadera forma de la vieja escuela sería escribir ... grep [m]iddleman ...para evitar matar el grepproceso por accidente. De esa manera, el grep no puede igualarse debido a citas divertidas.
Mikko Rantalainen
1
killall -9 -ir regex_pattern

que es interactivo (seguro) y coincide con el nombre del comando parcial.

Bohr
fuente