Bonjour,
je veut exécuter un programme sous Linux dans le terminal mais je veut quand je ferme le terminal, mon programme reste en éxecution.
j'ai essayé: "nohup programme" et sa marche pas
s'il vous plait aider moi.
Bonjour,
je veut exécuter un programme sous Linux dans le terminal mais je veut quand je ferme le terminal, mon programme reste en éxecution.
j'ai essayé: "nohup programme" et sa marche pas
s'il vous plait aider moi.
Bonjour,
Pour que tu puisses tuer le parent (ici le shell) sans tuer l'enfant (ton script), il faut détacher l'enfant du parent. Pour ce faire, la commande disown fonctionne bien:
En lançant MonScript en background (& en fin de ligne 1), le shell te renvoie le PID (ligne 2: 12345) et te laisse le prompt pour effectuer la seconde commande (ligne 3). Après cette dernière, tu peux tuer le shell et MonScript tourne toujours!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 MonScript & [1] 12345 disown 12345
Modif: Attention, la commande disown ne fonctionne pas en csh et ses descendants. Mais a priori tu devrais utiliser le shell bash. Alors tout devrait fonctionner comme décrit.
Il me semble que la commande suivante fonctionne très bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part nohup programm &
bonjour,
tu lances le programme
si tu fait un ctrl+c dans le terminal avant de le fermer !
a+
Bonsoir,
En fait, il y a des nuances qu'il faut bien expliquer. On peut soit jouer avec le signal SIGHUP... soit sans le signal mais il faut alors le shell Bash.
Avec le signal:
1) Depuis le shell, démarrer le script avec l'esperluète & en fin de ligne pour que le script tourne en tâche de fond.
2) Quitter le shell par Ctrl + D (envoi de SIGHUP au shell) ou par la commande kill -s SIGKILL (ou SIGTERM) <pid shell_parent>.
Le nohup est inutile. Malheureusement, les possibilités graphiques de quitter le shell ne vont pas envoyer le signal et le script mourra en même temps que le shell:
* clic dans la croix de la barre de titre
* menu Quitter
* autres...
Sans le signal, mais uniquement sous Bash:
1) Depuis le shell, démarrer le script avec l'esperluète & en fin de ligne pour que le script tourne en tâche de fond (pareil qu'avec le signal).
2) Depuis un shell (n'importe lequel), taper "disown XXXXX" avec XXXXX le pid du script.
Dans ce cas, le parent peut être tué de n'importe quel manière, le script continuera de tourner.
Bonjour,
Pourquoi dites-vous que la commande nohup ne fonctionne pas ? Il y a 4 solutions :
- La commande citée par BlireauOne (utilisation de nohup) fonctionne parfaitement, et c'est presque la plus simple à employer !
- Sinon, tu peux aussi te tourner vers l'utilisation de screen, mais c'est un peu plus complexe.
- disown fonctionne aussi, mais est spécifique au shell BASH
- En bash, le fait de quitter un shell avec ctrl-D détache les processus lancés en arrière plan.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager