Créer un processus indépendant du shell (bash)

Nom : Créer un processus indépendant du shell.

Configuration requise : L’interprète de commandes Bash.

Description : Lorsqu’on lance un programme depuis le shell bash, par exemple “iceweasel”, et que l’on ferme le terminal, l’application lancée est fermée elle aussi. C’est normal puisque tout processus enfant est tué lorsque le processus parent dont il est issu est tué. Les messages d’erreur de l’application sont aussi affichés dans le terminal.

Procédure simple : Pour lancer iceweasel sur le forum debian-fr, d’habitude on fait :

Il y a deux possibilité pour lancer iceweasel depuis le shell, sans perdre le contrôle :

[code]$ nohup iceweasel http://forum.debian-fr.org/ &> /dev/null &

$ iceweasel http://forum.debian-fr.org/ &> /dev/null & disown[/code]

Procédure avancée : On va créer une fonction Bash nommée “start” qui nous permettra de lancer simplement la commande

à la place de la procédure précédente.

Pour cela il faut ajouter ceci à la fin du fichier /home//.bashrc :

function start { nohup $@ &> /dev/null & }
ou bien :

function start { $@ &> /dev/null & disown }

Merci à MisterFreez pour avoir énormément amélioré ce truc et astuce !

Ça ne reviendrais pas au même d’utiliser nohup ?

Sinon sous zsh on peut utiliser l’option nohup (setopt nohup dans ~/.zshrc). Après quand on essaie de se déconnecter, zsh nous avertis qu’il a un fils (« Non ! Ne me tue pas ! J’ai un enfant ! Il a besoin de moi ! ») et il faut le fermer en deux fois. Ou alors on peut le lancer avec &!

Ce qui supprime ce message.

A oui inutile de proposer d’installer gcc, il y a d’autres compilateurs moins lourd si c’est juste pour compiler un petit programme comme ça genre tcc. :wink:

J’ai changé le compilateur proposé, et j’ai modifié la ligne de commande pour la compilation (gcc est devenu cc).

Par contre, ce truc et astuce doit fonctionner avec les shell Bash.
Voici mes essais avec nohup :

[code]nohup iceweasel http://forum.debian-fr.org/
nohup: ignoring input and appending output to `nohup.out’
ls

[/code]
La première ligne est embêtante (parasite). De plus ça ne rend pas le contrôle au shell (la commande ls n’est pas exécutée). Et autre point négatif : la sortie est dirigée dans un fichier texte, il faudrait l’ignorer purement et simplement (c’est le cas le plus courant).

Là le comportement est bon. Le tuto est le même sauf que le programme C sera un peu différent.

Et avec ceci dans .bashrc du coup ?

function start { nohup $@ &> /dev/null & }

:smt103 quelle concision ! Ca marche très bien en plus. J’édite mon post de suite.


TODO : Je viens de tomber sur ce truc et astuces : viewtopic.php?f=8&t=1951
Deux choses à voir : “bg” et “jobs”.
En plus sur wikipédia (nohup), ils disent qu’on peut utiliser “at” :