Идентификатор процесса
Эта статья нуждается в дополнительных цитатах для проверки . ( октябрь 2017 г. ) |
В вычислениях ( идентификатор процесса также известный как идентификатор процесса или PID ) — это число, используемое большинством операционных систем ядер , таких как Unix , macOS и Windows , для уникальной идентификации активного процесса . Это число может использоваться в качестве параметра в различных вызовах функций, позволяя манипулировать процессами, например, регулировать приоритет процесса или полностью его уничтожать .
Unix-подобный
[ редактировать ]В Unix-подобных операционных системах новые процессы создаются fork()
системный вызов . PID возвращается родительскому процессу , что позволяет ему ссылаться на дочерний процесс при дальнейших вызовах функций. Родитель может, например, дождаться завершения дочернего процесса с помощью waitpid()
функции или завершить процесс с помощью kill()
.
Есть две задачи со специально выделенными идентификаторами процессов: PID 0 используется для swapper или sched , которые являются частью ядра и представляют собой процесс, который запускается на ядре ЦП всякий раз, когда этому ядру ЦП больше нечего делать. [ 1 ] Linux также называет потоки этого процесса неактивными задачами . [ 2 ] В некоторых API PID 0 также используется как специальное значение, которое всегда относится к вызывающему потоку, процессу или группе процессов. [ 3 ] [ 4 ] Процесс с идентификатором 1 обычно является процессом инициализации, который в первую очередь отвечает за запуск и завершение работы системы. Первоначально идентификатор процесса 1 не был специально зарезервирован для init никакими техническими мерами: он просто имел этот идентификатор как естественное следствие того, что он был первым процессом, вызываемым ядром. Более поздние системы Unix обычно имеют дополнительные компоненты ядра, видимые как «процессы», и в этом случае PID 1 активно зарезервирован для процесса инициализации для обеспечения согласованности со старыми системами.
Идентификаторы процессов, во-первых, обычно выделяются последовательно, [ 5 ] начиная с 0 и увеличиваясь до максимального значения, которое варьируется от системы к системе. Как только этот предел будет достигнут, распределение возобновляется с 300 и снова увеличивается. В macOS и HP-UX выделение возобновляется со 100. Однако для этого и последующих проходов все PID, все еще назначенные процессам, пропускаются. Некоторые считают, что это потенциальная уязвимость безопасности, поскольку она позволяет извлекать информацию о системе или скрытно передавать сообщения между процессами. Таким образом, реализации, которые особенно заботятся о безопасности, могут выбрать другой метод назначения PID. [ 6 ] В некоторых системах, таких как MPE/iX , используется наименьший доступный PID, иногда с целью минимизировать количество страниц ядра с информацией о процессе в памяти.
Текущий идентификатор процесса предоставляется getpid()
системный вызов, [ 7 ] или как переменная $$
в оболочке. Идентификатор родительского процесса можно получить с помощью getppid()
системный вызов. [ 8 ]
В Linux максимальный идентификатор процесса задается псевдофайлом /proc/sys/kernel/pid_max
. [ 9 ]
Пид-файл
[ редактировать ]Некоторые процессы, например музыкальный проигрыватель moc и демон MySQL , записывают свой PID в документированное расположение файла, чтобы другие процессы могли его найти. [ нужна ссылка ]
Microsoft Windows
[ редактировать ]В операционных системах семейства Windows можно получить идентификатор текущего процесса, используя команду GetCurrentProcessId()
функция Windows API , [ 10 ] и идентификатор других процессов, использующих GetProcessId()
. [ 11 ] Внутренне идентификатор процесса называется идентификатором клиента и выделяется из того же пространства имен, что и идентификаторы потоков , поэтому они никогда не перекрываются. Процессу простоя системы присваивается идентификатор процесса 0. Системному процессу присваивается идентификатор процесса 8 в Windows 2000 и 4 в Windows XP и Windows Server 2003 . [ 12 ] В семействе операционных систем Windows NT идентификаторы процессов и потоков кратны 4, но это не является частью спецификации. [ 13 ]
См. также
[ редактировать ]- Идентификатор пользователя (UID)
- Идентификатор группы (GID)
- Ручка (вычислительная)
- Префикс сегмента программы (PSP)
Ссылки
[ редактировать ]- ^ Что такое ПИД 0?
- ^ Код ядра Linux: инструменты/perf/builtin-sched.c ,
pid 0 == swapper == задача простоя
- ^ kill(2) — страница руководства Linux
- ^ sched_setscheduler(2) — страница руководства Linux
- ^ pid_namespaces(7) — страница руководства Linux
- ^ comp.unix.aix Часто задаваемые вопросы , получено 21 июля 2008 г.
- ^ "getpid" , Базовые спецификации открытой группы, выпуск 7, издание 2018 г.
- ^ "getppid" , Базовые спецификации открытой группы, выпуск 7, издание 2018 г.
- ^ «proc — псевдофайловая система информации о процессе» , Руководство программиста Linux , получено 28 декабря 2009 г.
- ^ «Функция GetCurrentProcessId» , Центр разработки для Windows , Microsoft , 5 декабря 2018 г.
- ^ «Функция GetProcessId» , Центр разработки для Windows , Microsoft , 5 декабря 2018 г.
- ^ Руссинович, Марк ; Дэвид А. Соломон (2005), «Глава 2: Архитектура системы», Внутреннее устройство Microsoft Windows (4-е изд.), Microsoft Press, стр. 76 , ISBN 0-7356-1917-4
- ^ Чен, Рэймонд (28 февраля 2008 г.), «Почему идентификаторы процессов и потоков кратны четырем?» , Старая новая вещь , Microsoft