Python 3.3+Linux · macOSosfunction
os.waitid
os — waiting for processes
Flexibly wait for a child's state change; returns a details object. Availability: Unix.
Syntax
os.waitid(...)
It is more flexible than waitpid: events are chosen by flags (WEXITED, WSTOPPED, WCONTINUED), and with WNOWAIT the status is read while the child stays unreaped, so it can be waited on again. It returns an already decoded object, not an encoded status. With WNOHANG and no events it returns None.
Examples
import os
pid = os.fork() # → ? только Unix: 0 в дочернем процессе, PID потомка в родительском
if pid == 0: os._exit(3) # → ? потомок сразу завершается с кодом возврата 3
print(os.waitid(os.P_PID, pid, os.WEXITED | os.WNOHANG | os.WNOWAIT)) # → ? None, если потомок ещё не завершился; WNOWAIT не «съедает» статус — дождаться можно ещё раз
info = os.waitid(os.P_PID, pid, os.WEXITED) # → ? блокирующее ожидание именно этого потомка, вернёт os.waitid_result
print(info.si_pid == pid, info.si_status) # → ? True 3
print(info.si_code == os.CLD_EXITED) # → True — потомок завершился сам, а не был убит сигналом
print(os.waitid(os.P_PID, pid, os.WEXITED)) # → ChildProcessError: этого потомка уже дождались, ждать больше некого
See also
Common errors
Open in the full glossarydocs.python.orgReport an inaccuracy