os.WIFEXITED(), WEXITSTATUS(), WIFSIGNALED(), WTERMSIG() și celelalte în Python

Procese (os) Python 3.0+ (Unix)

Interpretează starea returnată de wait(): ieșire normală, oprire printr-un semnal, suspendare.

Sintaxă
os.WIFEXITED(stare), os.WEXITSTATUS(stare)
os.WIFSIGNALED(stare), os.WTERMSIG(stare), os.WCOREDUMP(stare)
os.WIFSTOPPED(stare), os.WSTOPSIG(stare), os.WIFCONTINUED(stare)

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 WEXITSTATUS fără să verifici întâi WIFEXITED; pentru un proces oprit de semnal, valoarea nu are sens.

Comenzi înrudite