Почему значения PID не непрерывны?

Если мы вводим ps -ef затем мы получаем список процессов. Почему числа PID не непрерывны?

14
задан 23 July 2015 в 01:23

4 ответа

На Ubuntu они непрерывны. В других операционных системах это могло бы отличаться.

ядро выделяет PIDs в диапазоне (RESERVED_PIDS, PID_MAX_DEFAULT). Это делает так последовательно в каждом пространстве имен (задачи в различных пространствах имен могут иметь те же идентификаторы). В случае, если диапазон исчерпывается, изодромное с предварением присвоение повторяется.

( https://stackoverflow.com/questions/3446727/how-does-linux-determine-the-next-pid)

Мышление, хотя...

  • планирование Ядра может разветвить процесс, таким образом, это, могло бы казаться, пропускало бы числа.
  • А PID исчезнет, когда та задача закончится.
  • PIDs не снова используются, пока PID_MAX_DEFAULT не достигнут.
  • А reserverd PID пропускается.

Некоторые темы на stackoverflow:

В комментариях является командой для тестирования присвоения PIDs:

for i in {1..20}; do sh -c 'echo $'; done
16
ответ дан 23 November 2019 в 02:55

Идентификаторы процесса, отсутствующие промежуточный, уже мертвы, и их PIDs будет снова использован ядром в более поздних процессах.

мертвые процессы не покажут в таблице процессов (за исключением зомби), следовательно ps -ef не покажет им.

8
ответ дан 23 November 2019 в 02:55

Обычно 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
3
ответ дан 23 November 2019 в 02:55

Они непрерывны. PID присвоен в последовательном порядке, пока максимальный предел не достигнут. После этого предела это начнет снова с нуля.

, Таким образом, это просто, что пропавшие без вести PIDs в ps -ef имеют мертвые процессы. Обратите внимание что ps -ef списки, только выполняющие процессы.

2
ответ дан 23 November 2019 в 02:55

Другие вопросы по тегам:

Похожие вопросы: