Ce face Popen.terminate(), kill() și send_signal()
terminate() cere oprirea (pe Unix trimite SIGTERM, pe care programul îl poate trata pentru o închidere curată). kill() oprește forțat (SIGKILL pe Unix). Pe Windows, ambele apelează TerminateProcess. send_signal(s) trimite orice semnal, de exemplu SIGINT (ca Ctrl+C).
După oprire, apelează wait() ca să eliberezi procesul. Pe Unix, returncode este minus numărul semnalului.
Parametri
| Parametru | Descriere |
|---|---|
semnal |
Pentru send_signal: constanta din signal. |
Ce returnează
None.
Exemple
Exemplul 1: Oprire politicoasă, apoi forțată
import subprocess, signal, sys
cod = "import time\nwhile True: time.sleep(1)"
for metoda in ["terminate", "kill", "send_signal"]:
p = subprocess.Popen([sys.executable, "-c", cod])
if metoda == "send_signal":
p.send_signal(signal.SIGINT)
else:
getattr(p, metoda)()
try:
p.wait(timeout=5)
except subprocess.TimeoutExpired:
p.kill()
p.wait()
print(metoda, p.returncode)
Rezultat (pe Linux sau macOS)
terminate -15
kill -9
send_signal 1
Greșeli frecvente
- Trimiți
SIGINTunui program Python și te miri că se termină cu codul 1 și un mesajKeyboardInterruptîn stderr: Python transformă semnalul în excepție.
Comenzi înrudite
os.kill() și os.killpg(): Trimite un semnal unui proces sau unui grup de procese, de exemplu pentru a-l opri.subprocess.Popen: communicate(), wait() și poll(): Pornește un program și îl controlează în timp ce rulează: date de intrare, ieșire pe bucăți, așteptare.os.WIFEXITED(), WEXITSTATUS(), WIFSIGNALED(), WTERMSIG() și celelalte: Interpretează starea returnată de wait(): ieșire normală, oprire printr-un semnal, suspendare.