Tengo un .pid
archivo y necesito verificar si el proceso se está ejecutando. Hasta ahora encontré dos opciones
kill -0 `cat something.pid`
que imprime un error si el pid no se está ejecutando. Sé que esto se puede redirigir /dev/null
, pero me hace pensar que esta no es la mejor solución.
La segunda solución sería usar ps
, que sin embargo también se imprime en STDOUT
ps -ef `cat something.pid`
¿Es normal redirigir la salida /dev/null
y simplemente usar el código de estado devuelto, o es una señal de que estoy haciendo algo mal y necesito un comando diferente?
kill -0
como es estándar (POSIX).Respuestas:
para la mayoría de las distribuciones de Linux, enumerar / proc / {pid} es una buena manera de obtener información sobre los procesos en ejecución y, por lo general, cómo los comandos del espacio de usuario como "ps" se comunican con el núcleo. Entonces, por ejemplo, puedes hacer;
Editar: debe verificar que kpid esté configurado, pero esto es más útil ya que devolverá "no existe" por $ {kpid} no establecido
fuente
${kpid}
existaComo Anders señaló, debe usar
kill -0
para el cumplimiento POSIX.En los sistemas Linux, también puede verificar la existencia de un archivo en el sistema de archivos / proc, por ejemplo,
fuente
Si esto está en un script (que supongo que es el caso, ya que le preocupa imprimir en stdout), entonces lo siguiente sería cómo podría hacerlo:
Las
ps -p
miradas de un proceso con el PID especificado en something.pid (la$()
sintaxis es una versión ligeramente más reciente de la tilde. Backtick necesita escapar en ciertas circunstancias que la nueva forma no lo hace). Los2>&1
redireccionamientos stderr para ese comando también.Si el
ps -p
comando no encuentra el proceso con ese PID, sale con un error> 0 yelse
se ejecuta. De lo contrario, lakill
declaración. Puede negar lo anterior si lo desea haciendo:Espero que responda tu pregunta. Obviamente, tenga cuidado y pruebe mucho cuando use comandos peligrosos como
kill
.fuente
Aquí hay algunas opciones:
/etc/init.d/
) y si está usando una distribución basada en Debian, será mejor que usestart-stop-daemon
: Debería obtener el código de salida 0 si se está ejecutando.procps
paquete:fuente
Si tiene un archivo pid, puede usar pgrep para verificar si el proceso se está ejecutando:
fuente