(Courriels de diversion: <narrees@prudente-dateront.com> <humanite@professeurs-delegueriez.com> <superdividende@pivert-numeroteriez.com> <vouerais@suppliciee-incriminerent.com> <arrangions@diarrhees-enfantements.com> <caracteres@immiscerez-rechaufferas.com> <fourrerons@immeuble-controleras.com> <remplacons@deshabituee-derivez.com> <feodale@combattes-identifia.com> <lingerie@ambulantes-enumereraient.com> )
>>>>> "jdd" == jdd <jdanield@dodin.net> writes: jdd> j'avais cru comprendre que nohup ou & (ou les deux ensemble), jdd> en mettant une tâche en fond permettait de quitter (déloguer) jdd> un terminal sans interrompre l'appli. Lorsqu'on se logue sur un système Unix, le système nous alloue un terminal (limitons nous aux intéractions en mode texte pour l'instant: connexion depuis une des consoles virtuelles ou par ssh). Ce terminal maître est un attribut du processus shell, qui est hérité par les fils du shell. Quand je tape ps, par exemple ,---- | % ps -f | UID PID PPID C STIME TTY TIME CMD | emarsden 19108 19107 0 Apr07 pts/0 00:00:00 -zsh | emarsden 14923 19108 0 13:15 pts/0 00:00:00 ps -f `---- je vois que le père 19108 et le fils 14923 partagent le même terminal nommé pts/0. L'accès au terminal maître est contrôle: un fils qui s'exécute en arrière plan ne peut pas y lire ou écrire; il est suspendu jusqu'à ce qu'il revienne en premier plan et redevienne ainsi propriétaire du terminal: ,---- | % emacs -nw & | [1] 14937 | % | [1] + suspended (tty output) emacs -nw | % fg | [1] + continued emacs -nw `---- Lorsqu'on se déconnecte de notre système Unix, le terminal qui nous avait été alloué est libéré. Les fils en arrière plan sont informés du fait que leur terminal maître va disparaître par la réception d'un signal HUP (hangup on controlling terminal). Ils peuvent alors décider de quitter (c'est le comportement par défaut), ou de continuer sans accès à leur terminal. La commande "nohup" permet d'exécuter une application en redirigeant sa sortie standard + erreur vers un fichier, et de telle sorte qu'elle ne quittera pas en recevant le signal HUP. On peut faire pareil a postieri en utilisant disown -h %1 pour dissocier le job numéro 1 (on connaît les numéros grâce à la commande "jobs") du terminal maître. [Tout ceci est compliqué par le fait que la notion de terminal maître a été partiellement remplacée dans la norme POSIX par la notion de session ou de groupe de processus, et que les shells ne gèrent pas toutes les sessions de la même manière.] La différence de comportement entre xterm et rxvt semble être ce qu'ils font lorsqu'on ferme brutalement leur fenêtre: le premier laisse le temps au shell de gérer la fermeture de la session (probablement en lui envoyant un SIGTERM), alors que rxvt semble mourir immédiatement, tuant ainsi le shell, qui n'a pas l'occasion de fermer la session. -- Eric Marsden <URL:http://www.laas.fr/~emarsden/> -------------------------------------------------------------------- Les listes de diffusion occultes: <URL:http://www.CULTe.org/listes/>