next up previous contents Next:  Traitement de la liste Up: Scripts utiles et commandes. Previous:  Ecrasement en toute sécurité   Table des matières  

21.7.11  Processus persistant en tâche de fond.

Imaginons que nous voulions lancer le terminal rxtv en arrière-plan. Ceci peut être réalisé ainsi:

rxtv & 


Cependant, une fois lancé, rxtv a encore sa sortie connectée au shell et reste un processus-fils du shell. Or, si le shell dont dépend rxtv meurt, il emporte ses processus-fils. Par ailleurs, rxtv peut aussi mourir de lui-même en tentant de lire ou d'écrire dans un terminal qui n'existe pas sans le shell-parent. Essayons donc à présent:

{rxtv >/dev/null 2>&1 </dev/null &} & 


Cette technique est connue sous le nom de forking twice ou redirection d'un terminal vers dev null. [NdT: sous UNIX, le terme forking désigne une instruction ou une commande (parfois nommée primitive) créant un nouveau processus à partir d'un autre sans détruire celui-ci. On pourrait donc tenter de traduire forking twice par ``dédoublement d'instruction(s)'']. Le shell est donc informé en matière de processus-fils mais pas concernant le processus résultant du forking twice. Dès lors, nous pouvons créer un processus-démon propre avec la commande ci-dessus.

Par conséquent, il est possible de créer un démon qui redémarre au cas où il lui arriverait de mourir. Bien qu'une telle fonctionnalité soit plus aisée à réaliser en C (dont nous verrons un aperçu au chapitre 23), vous pouvez atteindre cet objectif en bash avec:

{ { while true; do rxtv; done; } >/dev/null 2>&1 </dev/null & } & 


Vous pouvez observer l'effet de ces astuces en lançant:

ps awwwxf 


next up previous contents Next:  Traitement de la liste Up: Scripts utiles et commandes. Previous:  Ecrasement en toute sécurité   Table des matières  
1-01-2006