Ce face os.kill() și os.killpg()
kill(pid, semnal) trimite un semnal procesului. Cele mai folosite: signal.SIGTERM (cerere politicoasă de oprire), signal.SIGKILL (oprire forțată, nu poate fi ignorată), signal.SIGINT (ca Ctrl+C), signal.SIGHUP (reîncărcarea configurației la multe servicii). Semnalul 0 nu face nimic, dar verifică dacă procesul există.
killpg(grup, semnal) trimite semnalul tuturor proceselor dintr-un grup, util pentru a opri un program împreună cu procesele lui copil.
Parametri
| Parametru | Descriere |
|---|---|
pid / grup |
Procesul sau grupul. |
semnal |
Numărul semnalului (constantele din signal). |
Ce returnează
None.
Exemple
Exemplul 1: Oprirea unui proces copil
import os, signal, time
pid = os.fork()
if pid == 0:
os.setpgid(0, 0)
time.sleep(30)
os._exit(0)
time.sleep(0.1)
os.kill(pid, 0)
print("Procesul există")
os.killpg(pid, signal.SIGTERM)
_, stare = os.waitpid(pid, 0)
print(os.waitstatus_to_exitcode(stare) == -signal.SIGTERM)
try:
os.kill(pid, 0)
except ProcessLookupError:
print("Procesul nu mai există")
Rezultat
Procesul există
True
Procesul nu mai există
Greșeli frecvente
- Trimiți direct
SIGKILL: programul nu are ocazia să salveze datele. Încearcă întâiSIGTERM.
Comenzi înrudite
Popen.terminate(), kill() și send_signal(): Opresc un proces pornit cu Popen sau îi trimit un semnal.os.wait(), waitpid(), wait3(), wait4(), waitid() și waitstatus_to_exitcode(): Așteaptă terminarea proceselor copil și află cum s-au terminat.Grupuri de procese și sesiuni: getpgid(), setpgid(), setsid(), tcgetpgrp()...: Gruparea proceselor în grupuri și sesiuni, folosită de shell-uri și servicii.