J'ai un morceau de code qui est chargé de générer de nouveaux processus indépendants (qui devraient vivre après la fin du processus principal).

Lorsque j'exécute ce code en utilisant 'run' de PyCharm, ils sont générés indépendamment et restent en vie même après la fin de leurs parents.

Le problème est lors de l'exécution à partir d'un shell cmd (dans Windows), ils sont générés mais il semble qu'ils soient liés au shell de frai (pas le script python), donc le script principal se termine mais le shell reste actif et une fois que je ferme il les processus se terminent.

service_path = "some_service_path"
service_arguments = "some arguments"
python_execution_location = os.path.join(os.environ["PYTHON3_ROOT"], "python.exe")
execution_value = "{} {} {}".format(python_execution_location, service_path, service_arguments)
my_process = subprocess.Popen(execution_value, shell=True)
0
Rohi 18 mars 2019 à 09:20

2 réponses

Meilleure réponse

Dans Windows, vous pouvez utiliser l'option creationflags de Popen.

DETACHED_PROCESS = 8 # bit mask taken from the linked doc below
subprocess.Popen(executable, creationflags=DETACHED_PROCESS, close_fds=True)

Ce qui créera un processus détaché (processus démon).

https://docs.microsoft.com/en-us/windows/desktop/ProcThread/process-creation-flags

Pour les processus de console, le nouveau processus n'hérite pas de la console de son parent (par défaut). Le nouveau processus peut appeler la fonction AllocConsole ultérieurement pour créer une console. Pour plus d'informations, voir Création d'une console.

1
Arun Karunagath 22 mars 2019 à 17:41

Vous devrez peut-être envoyer un argument creationflags pour en faire un processus distinct

subprocess.Popen(executable, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP, close_fds=True)

lien python.org

2
Anirudh Panchangam 24 mars 2019 à 17:21