⌨️ Команда недели: pidfd_open
⌨️ Команда недели: pidfd_open Привет! В Linux PID может освободиться после завершения процесса и достаться другому. Если скрипт следит за процессом по PID, есть риск перепутать его с новым. Для этого в Linux есть pidfd_open() - системный вызов, который возвращает файловый дескриптор конкретного процесса. 👨💻 В Python его можно использовать так: import os import select fd = os.pidfd_open(1847) poller = select.poll() poller.register(fd, select.POLLIN) poller.poll() print("Процесс завершился") os.close(fd) Здесь 1847 - PID нужного процесса. os.pidfd_open() получает дескриптор, а poll() ждёт, пока процесс завершится. Не нужно постоянно проверять его существование или опрашивать /proc. 🔎 Допустим, вы пишете watchdog, который должен дождаться завершения конкретного процесса. С обычным PID можно столкнуться с его повторным использованием. А открытый pidfd продолжает ссылаться на исходный процесс. ⚙️ Работает механизм начиная с Linux 5.3. При этом pidfd_open() не решает проблему, если PID успели переиспользовать ещё до открытия дескриптора. Для собственных дочерних процессов pidfd лучше получать сразу при их создании. P.S. Через pidfd_send_signal() можно также отправлять сигналы конкретному процессу, не рискуя попасть в другой из-за повторного использования PID. 🤖Бесплатный ChatGPT