2012-07-26 29 views
13

Esto es lo que tengo ahora mismo en la escritura del golpe:Bash Script, Terminar proceso tirando de archivo PID

ps aux | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9 

El problema con esto es que si alguien está conectado y tirando algo relacionado con GlassFish , también extraerá ese PID. Por lo tanto, resulta en matar el PID equivocado.

Así que mi pregunta es cómo puedo arreglar lo que tengo que extraer solo el PID correcto, y cómo lo reescribo para extraer el PID del archivo PID que glassfish genera.

+11

kill -9 es un poco duro, ¿estás seguro de que necesitas este tipo de violencia? :-) –

Respuesta

17

Editar el script que comienza glassfish y colocar algo así como echo $$ > /path/to/PID-file (esta puede contener ~ para el directorio de casa o algún otro mecanismo, como $USER para hacer específico del usuario) en la línea inmediatamente después de la línea de salida del proceso. A continuación, puede eliminar el proceso correcto utilizando kill $(cat /path/to/PID-file).

+0

Por cierto, el ps a (eliminar el "solo a ti mismo"), no está en el código. He pegado esto erróneamente del código anterior. –

+4

UUOC para bash. '$ ( jordanm

+4

@jordanm El impacto en el rendimiento del uso de gatos aquí apenas será medible, y mucho menos notorio para el usuario. Tomaré una mejor legibilidad * cualquier * día. Si te hace sentir mejor, puedes reemplazarlo por 'less ', pero' $ ( Thor84no

0
ps aux | grep ^$USER | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9 

A continuación hice error con ps interruptores, es arriba grep debe estar bien.


ah no está funcionando, ps podría ser el uso como este ps -ao pid,tty,comm -u $USER, este grep anterior debe estar bien ...

someone else is logged in ...

Si es así, añadir modificador -u

ps aux -u $USER | grep glassfish | grep domain1 | gawk '{print $2}' | xargs kill -9 

$ USER es el nombre de usuario que se seleccionará y enlistará, por defecto debería ser ya está configurado en el entorno del sistema operativo. Múltiples usuarios pueden ser seleccionados por comas ps aux -u root,$USER

toma una nota: Si no hay un nombre de usuario específico en el sistema, ps tirará ERROR: no existe nombre de usuario.

Lea man ps para más.

-u userlist Select by effective user ID (EUID) or name. This selects the processes whose effective user name or ID is in userlist. The effective user ID describes the user whose file access permissions are used by the process (see geteuid(2)). Identical to U and --user.

Cuestiones relacionadas