Del artículo de Wikipedia sobre daemon:
En un entorno Unix, el proceso principal de un demonio es a menudo, pero no siempre, el proceso de inicio. Un demonio generalmente se crea mediante un proceso que bifurca un proceso secundario y luego sale inmediatamente, lo que hace que init adopte el proceso secundario, o mediante el proceso init que inicia directamente el demonio. Además, un demonio lanzado mediante bifurcación y salida generalmente debe realizar otras operaciones, como disociar el proceso de cualquier terminal de control (tty). Dichos procedimientos a menudo se implementan en varias rutinas de conveniencia como daemon(3) en Unix.
Lea la página de manual del daemon
función.
Ejecutar un comando en segundo plano desde un shell que sale inmediatamente da como resultado que el PPID del proceso se convierta en 1. Fácil de probar:
# bash -c 'nohup sleep 10000 &>/dev/null & jobs -p %1'
1936
# ps -p 1936
PID PPID PGID WINPID TTY UID STIME COMMAND
1936 1 9104 9552 cons0 1009 17:28:12 /usr/bin/sleep
Como puede ver, el proceso es propiedad de PID 1, pero aún está asociado con un TTY. Si me desconecto de este shell de inicio de sesión, vuelvo a iniciar sesión y hago ps
nuevamente, el TTY se convierte en ?
.
Lea aquí por qué es importante desconectarse de TTY.
Usando setsid
(parte de util-linux
):
# bash -c 'cd /; setsid sleep 10000 </dev/null &>/dev/null & jobs -p %1'
9864
# ps -p 9864
PID PPID PGID WINPID TTY UID STIME COMMAND
9864 1 9864 6632 ? 1009 17:40:35 /usr/bin/sleep
Creo que ni siquiera tienes que redirigir stdin, stdout y stderr.