2012-03-01 21 views
36

Estoy colocando una línea reaper en una tarea de rastrillo para matar algunas tareas de rubíes adicionales, ya que de alguna manera se arrastran en alguna ocasión.¿Cómo obtener el PID de la tarea de rake actual?

system "ps aux | grep 'namespace:taskname' | grep ruby | grep -v grep | awk '{print $2}' | xargs kill -9; echo 'Reaped old namespace:taskname processes.'" 

me gustaría añadir que en grep -v $PID_OF_CURRENT_TASK sólo para estar seguro de que no mato a la tarea actual que se está ejecutando también.

¿Cómo obtengo ese PID?

+0

Usted puede ser capaz de sustituir toda la tubería con una llamada bien redactado de '' pkill' o killall', o al menos sustituir a la primera parte de este gasoducto con 'pgrep'. Estos comandos son más seguros y mucho más comprensibles para un lector. – hagello

Respuesta

79

Usted recibe la corriente PID en Ruby con Process.pid

+10

También hay '$$' (que vino de Perl que lo obtuvo de '/ bin/sh'). –

+1

Me olvidé de eso. Es más críptico, pero más simple. Si "requiere" inglés "', también está '$ PID' o algo así. – Linuxios

+1

Por curiosidad, ¿cuál es la diferencia entre 'pid',' ppid', 'uid',' euid', 'gid' y' egid'? –

Cuestiones relacionadas