Python 3.9+Linuxsignalфункция
signal.pidfd_send_signal()
отправка сигналов
Посылает сигнал процессу по файловому дескриптору pidfd, а не по PID. Только Linux 5.1+.
Синтаксис
signal.pidfd_send_signal(pidfd, sig, siginfo=None, flags=0)
Смысл в защите от переиспользования PID: os.kill по старому номеру может попасть в чужой процесс, а pidfd навсегда привязан к одному процессу — если тот завершился, будет ProcessLookupError. Дескриптор берут через os.pidfd_open(pid) и закрывают os.close. Аргументы siginfo и flags пока не поддерживаются: только None и 0.
Примеры
import os, signal
got = []
old = signal.signal(signal.SIGUSR1, lambda s, f: got.append(s))
fd = os.pidfd_open(os.getpid()) # → ? нужен Linux 5.1+
signal.pidfd_send_signal(fd, signal.SIGUSR1)
os.close(fd)
signal.signal(signal.SIGUSR1, old)
print(got == [signal.SIGUSR1]) # → True
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности