Comment faire en sorte que le programme abandonne le contrôle du terminal?

J’écris un programme Python pour Linux et le programme utilise essentiellement le terminal pour donner un feedback à l’initialisation à l’utilisateur, puis il doit abandonner le contrôle du terminal et continuer son exécution en arrière-plan. Comment puis-je atteindre cet objective?

Je vous remercie

Vous pouvez utiliser os.fork () pour créer un processus enfant:

 import os import time msg = raw_input("Enter message for child process") x = os.fork() if not x: for i in range(5): time.sleep(3) print msg 

os.fork () renvoie 0 dans le processus fils et l’ID du processus enfant dans le processus paret Notez que chaque processus reçoit sa propre copie des variables locales.

J’espère que cela t’aides

Enveloppez simplement votre programme avec python-daemon .

Forking est probablement la bonne chose à faire, ici, et la démonisation est meilleure, mais une manière simple d’obtenir le même effet, sans changer le script est (comme le suggère le commentaire de la question) de simplement placer le script en arrière-plan.

Ce que vous ne ferez pas, cependant, est de renoncer complètement à la connexion au terminal. Pour cela, utilisez nohup :

 (nohup python foo.py >foo-output &) 

est un moyen simple de démoniser un script. Le nohup signifie que le processus ne sera pas tué lorsque son terminal de contrôle ira, et placer le script en arrière-plan d’un sous-shell (...) , qui se termine alors, signifie qu’il devient l’enfant du processus init. C’est surtout ce que signifie “démoniser”, en effet.

Il s’agit d’une technique plus générale que la question initiale ne l’appelle vraiment, mais néanmoins utile.