os.kill() și os.killpg() în Python

Procese (os) Python 3.0+

Trimite un semnal unui proces sau unui grup de procese, de exemplu pentru a-l opri.

Sintaxă
os.kill(pid, semnal)
os.killpg(grup, semnal)

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âi SIGTERM.

Comenzi înrudite