Новое Распределяем каналы MAX по категориям и территориям. Читать новость

⌨️ Команда недели: 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
Просмотры: 203
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти