GNU/Linux >> Tutoriels Linux >  >> Linux

Démoniser un processus en shell ?

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.


Linux
  1. Démon JVM ?

  2. Descendants de processus ?

  3. Histoire mutilée ?

  4. Pourquoi "ls" nécessite-t-il un processus distinct pour l'exécution ?

  5. Est-il possible de changer l'environnement d'un processus parent en Python ?

Qu'est-ce qu'un fichier .sh ?

Pourquoi popen() invoque-t-il un shell pour exécuter un processus ?

Pourquoi exécuter une commande shell Linux avec '&' ?

Un processus peut-il s'exécuter indépendamment de n'importe quel shell ?

Est-il possible qu'un processus démon (c'est-à-dire en arrière-plan) recherche les pressions sur les touches d'un clavier USB ?

Le processus init peut-il être un script shell sous Linux ?