objectif
Lancer un processus dans son propre groupe et l’arrêter avec signal (Unix/Windows).
code minimal
import subprocess, sys, os, time, signal
if os.name == "posix":
p = subprocess.Popen([sys.executable, "-c", "import time; time.sleep(1)"], preexec_fn=os.setsid)
os.killpg(p.pid, signal.SIGTERM)
print(True) # attendu: True
else:
CREATE_NEW_PROCESS_GROUP = 0x00000200
p = subprocess.Popen([sys.executable, "-c", "import time; time.sleep(1)"], creationflags=CREATE_NEW_PROCESS_GROUP)
p.terminate()
print(True)
utilisation
import subprocess, sys
p = subprocess.Popen([sys.executable, "-c", "print('x')"])
code = p.wait()
print(code == 0)
variante(s) utile(s)
import subprocess, sys
p = subprocess.Popen([sys.executable, "-c", "import time; time.sleep(0.01)"])
p.terminate(); p.wait(timeout=1.0)
print(p.returncode is not None)
notes
- Sur Unix, démarrez un groupe (setsid) puis envoyez le signal au groupe.
- Sur Windows, utilisez creationflags et p.terminate() pour stopper le processus.