🖥 PIDFD + EPOLL: современный способ ждать завершения процессов
Хитрый приём для Linux на Python: можно отслеживать завершение процессов через pidfd и epoll без опроса и без сигналов. Это удобнее, чем проверять ps
или ловить SIGCHLD — надёжно, без зомби и лишней нагрузки.
Подходит для написания супервайзеров и воркеров на ядрах Linux 5.3+. Хочешь больше таких фишек? Подписывайся на нас и каждый день получай свежие и нестандартные советы, которые реально прокачают твои навыки разработчика!
import os, subprocess, select
def wait_pid(pid: int, timeout=None) -> bool:
fd = os.pidfd_open(pid, 0)
ep = select.epoll()
ep.register(fd, select.EPOLLIN)
events = ep.poll(timeout)
os.close(fd)
return bool(events)
p = subprocess.Popen(["sleep", "2"])
print("Ждём процесс:", p.pid)
print("Завершился?", wait_pid(p.pid, 5))
@linuxkalii