Bash/processus en démon

Un article de Le wiki de 2 noisettes - noisette.ch.


Sommaire

Greedy way

Pour lancer des processus en background, rien de plus simple. Il suffit d'ajouter

&

à la fin de la ligne de commande. Mais que se passe-t-il quand on quitte le terminal qui nous a permi de lancer cette commande ? Puisque le processus est rattaché au terminal, et un

ps auxf 

nous le prouvera, le processus est aussi arrêté quand on quitte.

Il existe néamoins différentes techniques pour détacher le processus du terminal duquel on l'a invoqué.

Subprocessiong

L'usage de parenthèses permet de lancer la commande dans un sous-shell.

(dsniff -w networks_passwords.txt > /dev/null 2>&1 < /dev/null &)

Sans ajouter des redirections d'entrées et sorites, le processus resterait quand même attaché au terminal. Attention à l'ordre des redirections de sorties, elles sont interprétées de droite à gauche...

start-stop-daemon

Un utilitaire debian fait très bien l'affaire :

start-stop-daemon --start --background --exec /usr/sbin/dsniff -- -w /root/network_passwd.txt

Il met en background et détache le processus du terminal courant.

Pour arrêter :

start-stop-daemon --stop --exec /usr/sbin/dsniff

Forking twice

Note : cette commande ne fonctionne pas chez moi...

{dsniff -w networks_passwords.txt > /dev/null 2>&1 < /dev/null &} &

Source : http://loligrub.be/contrib/tlepoint/BASE/node250.html

Utiliser la commande disown de bash

Bash contient une commande appelée "disown" (help disown) qui permet de faire qu'un sous processus du shell ne reçoive pas les SIGHUP que le shell reçoit avant de mourrir. Utiliser l'option -h pour éviter que le processus soit tué sur le champ. Si tous les inputs et outputs ont été redirigés, on peut alors quitter le shell sans problèmes:

dsniff -w networks_passwords.txt 2>&1 > /dev/null < /dev/null &
disown -h 1