Como usar el cut

Imagen de ferranferri
0 puntos

Hola a todos.
Estoy tocando tomcat y a veces tengo que reiniciarlo. El procedimiento es hacer un ps aux | grep java, y despues un kill -9 del PID del proceso. Lo que quiero hacer es algo asi:
ps -aux | grep java | cut -f2 -d' ' | kill -9

Pero tengo varios problemas. Si el resultado es, por ejemplo,
ferranferri 5522 1.4 .... catalina...
ferranferri 12253 .... grep java....

Linux, para tabular, le mete mas espacios al que tiene un pid de cuatro cifras, con lo que el resultado de ps -aux | grep java | cut -f2 -d' ' es varios resultados en blanco y casi siempre el resultado mas grande:

<-- Aqui deberia ir el PID que quiero.
12253

La primera pregunta es esa: como puedo tabular los resultados con cut para que la separacion entre columnas sea fija? O existe algun comando alternativo?

La segunda es sobre el KILL que esta mal puesto. Como puedo enviar los resultados de ps -aux | grep java | cut -f2 -d' ' al kill para que los mate?

Muchas gracias

Imagen de Adeptus24
+1
0
-1

Yo si solo quieres sacar el pid lo haria con AWK, es facil, despues de aislar las lineas que quieras con el ps, grep, etc... pones un | awk '{ print $X }' donde X es el campo donde esta, si el primero es el usuario que lanzo el proceso y quieres eso pones $1, si el proceso es el segundo campo pones $2 y asi con los que quieras, si quieres aislar varios los separas con , para que tengan un espacio entre medias, etc... llevo solo unas semanas con esto asi que puede que me coma algo, pero puede que te ayude a investigar.

Es decir, si quiero los pid de los procesos del gnome rulando en el sistema seria asi:

ps -aux | grep gnome | awk '{
print $2
}'

Un saludo!

+1
0
-1
Imagen de ferranferri
+1
0
-1

Me ha ido muy bien, gracias. Ahora solo me queda la siguiente pregunta, que es lo del kill. Como hago para que la entrada del kill sea la salida del comando anterior??

Muchas gracias

+1
0
-1
Imagen de Adeptus24
+1
0
-1

Perdona que no te entienda, pero es que yo al igual que tu soy novato, incluso mas que tu y esto se me queda grande jajajaja

Si lo que quieres es matar todos los procesos que aislas con el grep puedes hacer esto, es muy cutre pero funciona, tiene que haber alguna forma de redirigir la salida y ejecutarla sin tener que crear y borrar un fichero... pero no se me ocurre ya que no tengo los conocimientos necesarios:

#!/bin/bash
ps -aux | grep nombre_proceso | awk '{ 
print $2 
}' | sed '/^[0-9]/s//kill -9 &/g' | sed '/^kill*/s/$/ ; &/g' > kill.sh
bash kill.sh 
rm kill.sh

Esto lo que hace es aislar con el awk los pid´s de los procesos que aislas con el grep, luego con el primer sed le añades a cada pid un kill -9 delante, y con el segundo sed lo que hace es añadir un espacio y un ; para separar las lineas, todo ello lo redirijo a un fichero, y este lo ejecuto como si fuese un script, por lo tanto ejecuta cada "kill -9 PID ;" de uno en uno matando los procesos, y al final borra el fichero que se crea.

Un saludo y espero que alguien te pueda ayudar mejor.

+1
0
-1
Imagen de ferranferri
+1
0
-1

Yo es que en una ocasion lo vi en una sola linea, pero perdi las notas donde lo tenia apuntado. Si no hay otra usare tu comando pero estoy seguro de que el kill se le puede enviar a su entrada cosas por un pipe pero siempre me da un error.

Muchas gracias igualmente.

+1
0
-1