59 votes

Comment exécuter un programme Python en arrière-plan même après avoir fermé le terminal?

Je lance un programme python à partir d'un terminal sur ma machine Ubuntu comme suit,

$ python test.py

Mais mon programme s'arrête complètement si je ferme le terminal. Y a-t-il un moyen de faire tourner ce programme python en arrière-plan afin qu'il continue de fonctionner même si je ferme mon terminal?

Et aussi, après avoir exécuté ce programme en arrière-plan, comment puis-je vérifier si mon programme est toujours en cours d'exécution lorsque je me reconnecte à ce terminal?

97voto

sourav c. Points 40637

Utilisez la ligne shebang dans votre script python. Rendez-le exécutable en utilisant la commande,

chmod +x test.py

Utilisez no hangup pour exécuter le programme en arrière-plan même si vous fermez votre terminal,

nohup /chemin/vers/test.py &

ou simplement (sans apporter de modification à votre programme)

nohup python /chemin/vers/test.py &

N'oubliez pas d'utiliser & pour le mettre en arrière-plan.

Rôle de nohup: nohup fait en sorte que votre script ignore SIGHUP, et redirige stdout/stderr vers un fichier nohup.out, permettant ainsi à la commande de continuer à s'exécuter en arrière-plan après que vous vous êtes déconnecté. Si vous fermez l'invite de commande/terminal ou vous déconnectez, votre commande n'est plus un processus enfant de cet invite de commande. Elle appartient au processus init. Si vous recherchez dans pstree, vous verrez qu'elle est maintenant possédée par le processus 1 (init).

Pour voir à nouveau le processus, utilisez dans le terminal,

ps ax | grep test.py

Il ne peut pas être ramené au premier plan car le premier plan (comme le terminal est déjà fermé) n'existe plus. Il n'y a donc aucun moyen de récupérer ce terminal une fois qu'il est fermé.

15voto

LordT Points 3342
python test.py &

va exécuter le fichier en arrière-plan.

Pour trouver le programme en cours d'exécution, vous pouvez utiliser ps -e pour lister tous les programmes en cours d'exécution. Vous pouvez utiliser grep pour trouver votre programme particulier dans la liste.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X