Если мы введем, ps -ef
мы получим список процессов. Почему номера PID не являются непрерывными?
Если мы введем, ps -ef
мы получим список процессов. Почему номера PID не являются непрерывными?
Ответы:
На Ubuntu они непрерывны. В других операционных системах это может отличаться.
Ядро выделяет PID в диапазоне (RESERVED_PIDS, PID_MAX_DEFAULT). Это происходит последовательно в каждом пространстве имен (задачи в разных пространствах имен могут иметь одинаковые идентификаторы). В случае, если диапазон исчерпан, назначение pid оборачивается.
( /programming/3446727/how-does-linux-determine-the-next-pid )
Имейте в виду, хотя ...
Некоторые темы по stackoverflow:
В комментариях есть команда для проверки присвоения PID:
for i in {1..20}; do sh -c 'echo $$'; done
Обычно PID является непрерывным, но какой-то процесс будет остановлен к тому времени, когда вы запустите команду ps -ef
.
Также некоторые процессы могут быть просто подпроцессом другого процесса, который не показан в ps -ef
команде. Чтобы увидеть расширенный результат, и вы можете проверить непрерывный PID, используйтеpstree
pstree -p
Пример вывода:
├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│ ├─{teamviewerd}(3475)
│ ├─{teamviewerd}(3476)
│ ├─{teamviewerd}(3477)
│ ├─{teamviewerd}(3478)
в то время как если вы запустите, ps -ef
вы просто увидите родительский процесс.
$ ps -ef | grep teamviewerd
root 3468 1 0 Jul15 ? 00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f
Они непрерывны. ПИД назначаются в последовательном порядке до достижения максимального предела. После этого предела он начнется снова с нуля.
Так что просто отсутствующие идентификаторы PID ps -ef
являются мертвыми процессами. Обратите внимание, что ps -ef
перечислены только запущенные процессы.