Extrait de l'article Wikipedia sur le démon :
Dans un environnement Unix, le processus parent d'un démon est souvent, mais pas toujours, le processus init. Un démon est généralement soit créé par un processus forkant un processus enfant puis se fermant immédiatement, provoquant ainsi l'adoption du processus enfant par init, soit par le processus init lançant directement le démon. De plus, un démon lancé par duplication et sortie doit généralement effectuer d'autres opérations, telles que la dissociation du processus de tout terminal de contrôle (tty). De telles procédures sont souvent implémentées dans diverses routines pratiques telles que daemon(3) sous Unix.
Lire la page de manuel du daemon
fonction.
L'exécution d'une commande en arrière-plan à partir d'un shell qui se ferme immédiatement entraîne la mise à 1 du PPID du processus. Facile à tester :
# 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
Comme vous pouvez le voir, le processus appartient au PID 1, mais toujours associé à un TTY. Si je me déconnecte de ce shell de connexion, reconnectez-vous et faites ps
encore une fois, le TTY devient ?
.
Lisez ici pourquoi il est important de se détacher de l'ATS.
Utilisation de setsid
(partie 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
Je pense que vous n'avez même pas besoin de rediriger stdin, stdout et stderr.