http://linuxg.net/how-to-transform-a-process-into-a-daemon-in-linux-unix/ donne un exemple de démonétisation d'un processus en bash:
$ nohup firefox& &> /dev/null
Si je ne me trompe pas, la commande est la même que "nohup et background a process". Mais un démon n'est-il pas plus qu'un processus simple et d'arrière-plan?
Quelles étapes manquent ici pour démoniser un processus?
Par exemple, la modification du processus parent n'est-elle pas nécessaire lors de la démonétisation d'un processus? Si oui, comment faites-vous cela en bash? J'essaie toujours de comprendre une réponse connexe https://unix.stackexchange.com/a/177361/674 .
Quelles autres étapes et conditions?
Voir ma question connexe https://stackoverflow.com/q/35705451/156458
start-stop-daemon
Debian; Je vais laisser ici un fil de discussion de stack overflow stackoverflow.com/questions/16139940/… qui est plus intéressant que la page de manuel bruteRéponses:
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 créé soit par un processus en forçant un processus enfant, puis en se fermant immédiatement, obligeant ainsi init à adopter le processus enfant, ou par le processus init qui lance directement le démon. En outre, un démon lancé en forçant et en quittant doit généralement effectuer d'autres opérations, telles que la dissociation du processus de tout terminal de contrôle (tty). Ces procédures sont souvent implémentées dans diverses routines de commodité telles que le démon (3) sous Unix.
Lisez la page de manuel de la
daemon
fonction.L'exécution d'une commande d'arrière-plan à partir d'un shell qui se ferme immédiatement entraîne le PPID du processus devenant 1. Facile à tester:
Comme vous pouvez le voir, le processus appartient au PID 1, mais est toujours associé à un ATS. Si je me déconnecte de ce shell de connexion, puis me reconnecter et
ps
recommencer, le TTY devient?
.Lisez ici pourquoi il est important de se détacher des ATS .
Utilisation
setsid
(partie deutil-linux
):Je pense que vous n'avez même pas à rediriger stdin, stdout et stderr.
la source
bash -c
wrapper, aucun ATS n'est associé au processus. C'est vraiment comme il l'a démontré.echo "outer tty: $(tty)"; ls -la $(dirname $(tty)); bash -c 'echo "inner tty: $(tty)"; ls -la $(dirname $(tty));'
vous montrera que c'est exactement le même ATS pour les deux, mais le comportement démontré d'obtenir un ATS?
se produit toujours même si vous ne vous "déconnectez pas du shell" ni ne fermez le TTY.Un démon, de par son nom, n'est rien d'autre qu'un programme qui s'exécute jusqu'à 1. l'arrêt du système; 2. il est demandé d'arrêter. À part cela, cela n'a pas de sens magique.
Dans ces circonstances, l'exécution d'un script bash en arrière-plan avec nohup peut le classer comme un processus démon.
Qu'espérez-vous trouver et ne pas trouver? Si vous rencontrez des problèmes, veuillez les indiquer avec un exemple de code et des exemples de segments de données pour demander de l'aide. Votre question, telle qu'elle est actuellement, est trop large / générale.
la source