Если мы вводим ps -ef
затем мы получаем список процессов. Почему числа PID не непрерывны?
На Ubuntu они непрерывны. В других операционных системах это могло бы отличаться.
ядро выделяет PIDs в диапазоне (RESERVED_PIDS, PID_MAX_DEFAULT). Это делает так последовательно в каждом пространстве имен (задачи в различных пространствах имен могут иметь те же идентификаторы). В случае, если диапазон исчерпывается, изодромное с предварением присвоение повторяется.
( https://stackoverflow.com/questions/3446727/how-does-linux-determine-the-next-pid)
Мышление, хотя...
Некоторые темы на stackoverflow:
В комментариях является командой для тестирования присвоения PIDs:
for i in {1..20}; do sh -c 'echo $'; done
Идентификаторы процесса, отсутствующие промежуточный, уже мертвы, и их PIDs будет снова использован ядром в более поздних процессах.
мертвые процессы не покажут в таблице процессов (за исключением зомби), следовательно ps -ef
не покажет им.
Обычно 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 присвоен в последовательном порядке, пока максимальный предел не достигнут. После этого предела это начнет снова с нуля.
, Таким образом, это просто, что пропавшие без вести PIDs в ps -ef
имеют мертвые процессы. Обратите внимание что ps -ef
списки, только выполняющие процессы.