Утилизация PID Linux

Есть ли какая-либо политика в Linux в отношении утилизации используемых PID? Я имею в виду, если бы использовался PId, сколько позже он будет использоваться снова?

Ответ 1

Как новые процессы fork in, PID увеличиваются до зависящего от системы предела, а затем обертываются. Ядро не будет повторно использовать PID до того, как это произойдет.

Предел (максимальное число pids) составляет /proc/sys/kernel/pid_max. В руководстве говорится:

/proc/sys/kernel/pid_max (начиная с Linux 2.5.34)

Этот файл указывает значение, при котором PID обертывают (т.е. значение в этом файле больше максимального PID). По умолчанию значение для этого файла, 32768, приводит к тому же диапазону PID, что и на ранние ядра

Ответ 3

Новая pidfd функция,помогающая менеджерам сервисов справляться с проблемами повторного использования PID

Чтобы решить проблему повторного использования PID в системах Unix,

Linux 5.1 добавил pidfd_send_signal(2), что позволяет процессам отправлять сигналы на дескрипторы pidfd, которые стабильны даже после повторного использования PID.

Linux 5.2 добавил CLONE_PIDFD к clone(2), что позволило пользователям создавать PID, которые можно было использовать с pidfd_send_signal(2). Но существует множество процессов, созданных с помощью fork() или clone() без CLONE_PIDFD, что может вызвать проблемы для Android убийцы с низким объемом памяти (LMK) или менеджеров служб, таких как systemd,

В Linux 5.3 добавлен системный вызов pidfd_open(2) для завершения функциональности, необходимой для решения проблемы повторного использования PID. Это позволяет вызывающей стороне получить запрашиваемый pidfd для процесса, который не был создан с использованием флага CLONE_PIDFD clone(2).

Кроме того, в Linux 5.3 добавлена поддержка опроса pidfds. Это позволяет менеджерам процессов знать, когда (не родительский) процесс умирает без гонки. Используемый механизм уведомления следует той же логике, которая используется в настоящее время, когда родитель задачи уведомляется о смерти ребенка. С помощью этого набора патчей можно поместить pidfds в цикл опроса {e} и получать надежные уведомления для выхода из процесса (то есть группы потоков).

Рекомендуемая статья LWN: Новые системные вызовы: pidfd_open() и close_range()