Утилизация 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, что и на ранние ядра
Ответ 2
https://superuser.com/questions/135007/how-are-pids-generated
Это должно ответить на ваш вопрос - кажется, он переработает 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()