Почему системный PID 4, а не PID 1?

мой Google-fu подвел меня!

в Linux процесс с наименьшим PID init С PID 1, так как это первый процесс, который запускается после загрузки ядра и отвечает за запуск всех остальных процессов.

pi@raspberry:~ $ ps -ef --sort=pid | head -n 5
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Jan22 ?        00:02:20 /sbin/init
root         2     0  0 Jan22 ?        00:00:00 [kthreadd]
root         3     2  0 Jan22 ?        00:05:54 [ksoftirqd/0]
root         5     2  0 Jan22 ?        00:00:00 [kworker/0:0H]

в Windows процесс с наименьшим PID System С PID 4.

PS C:Usersmsbob> Get-Process | Sort-Object Id | Select -First 5

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----      ----- -----   ------     -- -----------
      0       0        0         24     0               0 Idle
    755       0      144        844     4               4 System
     32       1      556       1268     4             388 smss
    521      82   139796     124204   390     6.07    424 iexplore
    661      12     2268       4728    49             604 csrss

почему System PID 4 в Windows, а не PID 1?

8
задан Hydraxan14
02.01.2023 19:30 Количество просмотров материала 2469
Распечатать страницу

1 ответ

вы заметите, что все PID делятся на 4. Поэтому 4-первый ПИД доступна через 0 (что процесс ожидания).

по той причине, что это - Это правда, см. это сообщение MSDN

идентификаторы процессов и потоков кратны четырем в качестве побочного эффекта кода повторное использование. Тот же код, который выделяет дескрипторы ядра, также используется для выделите ID процессов и потоков. Поскольку дескрипторы ядра кратны из четырех, так тоже идентификаторы процессов и потоков.

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

и по той причине, что дескрипторы ядра всегда делятся на четыре... Раймонд Чен в спасение опять!

доступность двух нижних битов похоронена в ntdef.ч заголовок файл:

// Low order two bits of a handle are ignored by the system and available 
// for use by application code as tag bits.  The remaining
// and used to store a serial number and table index.    
#define OBJ_HANDLE_TAGBITS  0x00000003L

(для тех, кто не знаком с двоичными числами: положительное двоичное целое число с двумя младшими битами ноль всегда делится на четыре, так же, как десятичное число, которое заканчивается на "00", всегда делится на 100.)

Так... причудливый ответ, что первый ПИД-действительно "1". Это просто Диспетчер задач, et al, не знаю, что во внутреннем виде сдвинуто влево на два бита. :)

5
отвечен Jamie Hanrahan 2023-01-04 03:18

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх