Ce face os.WIFEXITED(), WEXITSTATUS(), WIFSIGNALED(), WTERMSIG() și celelalte
Starea de la wait()/waitpid() este un număr codificat. WIFEXITED spune dacă procesul s-a terminat normal, iar WEXITSTATUS dă codul de ieșire. WIFSIGNALED spune dacă a fost oprit de un semnal, WTERMSIG ce semnal, iar WCOREDUMP dacă s-a creat un fișier „core”.
WIFSTOPPED și WSTOPSIG descriu un proces suspendat (cu opțiunea WUNTRACED), iar WIFCONTINUED unul reluat (cu WCONTINUED). Pentru cazul obișnuit, os.waitstatus_to_exitcode() este mai simplă.
Parametri
| Parametru | Descriere |
|---|---|
stare |
Starea returnată de wait. |
Ce returnează
Bool sau un număr.
Exemple
Exemplul 1: Ieșire normală, semnal și suspendare
import os, signal, time
pid = os.fork()
if pid == 0:
os._exit(3)
_, s = os.waitpid(pid, 0)
print(os.WIFEXITED(s), os.WEXITSTATUS(s), os.WIFSIGNALED(s))
pid = os.fork()
if pid == 0:
time.sleep(10)
os._exit(0)
os.kill(pid, signal.SIGSTOP)
_, s = os.waitpid(pid, os.WUNTRACED)
print(os.WIFSTOPPED(s), signal.Signals(os.WSTOPSIG(s)).name)
os.kill(pid, signal.SIGCONT)
os.kill(pid, signal.SIGTERM)
_, s = os.waitpid(pid, 0)
print(os.WIFSIGNALED(s), signal.Signals(os.WTERMSIG(s)).name, os.WCOREDUMP(s), os.WIFCONTINUED(s))
Rezultat
True 3 False
True SIGSTOP
True SIGTERM False False
Greșeli frecvente
- Apelezi
WEXITSTATUSfără să verifici întâiWIFEXITED; pentru un proces oprit de semnal, valoarea nu are sens.
Comenzi înrudite
os.wait(), waitpid(), wait3(), wait4(), waitid() și waitstatus_to_exitcode(): Așteaptă terminarea proceselor copil și află cum s-au terminat.os.kill() și os.killpg(): Trimite un semnal unui proces sau unui grup de procese, de exemplu pentru a-l opri.