Puede usar killall o kill, dependiendo de si está tratando de encontrar la tarea por PID o por su nombre.
Por Nombre:
if ! killall -s -0 $PROCESS_NAME >/dev/null 2>&1; then
# Restart failed app, or do whatever you need to prepare for starting the app.
else
at -f $0 +30seconds # If you don't have this on cron, you can use /usr/bin/at
fi
Por PID:
if ! kill -0 $PID 2>/dev/null; then
# Restart app, do the needful.
else
at -f $0 +30seconds
fi
Si nos fijamos en el Manual OSX verá un conjunto diferente de los comandos de gestión de procesos; dado que no es el kernel de Linux, tiene sentido que administren los procesos de manera diferente.
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/killall.1.html
Un ejemplo del resultado de mi terminal (ponchando el usuario y el nombre de host, por supuesto):
[email protected]:~$ kill -0 782 # This was my old, stale SSH Agent.
bash: kill: (782) - No such process
[email protected]:~$ echo $?
1
[email protected]:~$ kill -0 813 # This is my new SSH agent, I only just created.
[email protected]:~$ echo $?
0
El código de retorno de una matanza -0 siempre resultará en una forma segura de compruebe si el proceso se está ejecutando, porque -0 no envía ninguna señal que pueda ser manejada por una aplicación. No matará a la aplicación, y "matar" solo se llama "matar" porque generalmente se usa para detener una aplicación.
Cuando observa las interfaces que utiliza en la fuente, verá que en realidad está interactuando con la tabla de proceso directamente (y no almacenando una salida potencialmente cargada de ps) y simplemente enviando una señal a una aplicación. Algunas señales indican que la aplicación se debe apagar o detener, mientras que otras señales indican que debe reiniciar los servicios o volver a leer la configuración o volver a abrir los descriptores de archivos para registrar los archivos que se han girado recientemente. Hay una gran cantidad de cosas que "kill" y "killall" pueden hacer que no terminan la aplicación, y se usan regularmente para enviar una señal a la aplicación.
Estoy agregando "unix" a la lista de etiquetas porque realmente no hay nada específico de mac sobre esta pregunta ... (Saliendo de "mac" para que las personas específicas de mac lo encuentren también ...) –
BTW, si están creando un proceso parecido a un daemon en OS X, eche un vistazo a 'launchd', el reemplazo de Apple para' cron', 'init',' inetd' et al. Tiene muchas opciones para iniciar y reiniciar procesos en varios contextos y tiempos. Vea 'man launchd',' man launchd.plist', y google para varios documentos y tutoriales. –
Gracias Ned. De hecho, estoy usando Lingon como una interfaz fácil de usar para 'launchd'. –