Введение

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

В информатике идентификатор процесса (также известный как ID процесса или PID) — это число, используемое большинством ядер операционных систем, таких как Unix, macOS и Windows, для уникальной идентификации активного процесса. Это число может использоваться как параметр в различных вызовах функций, позволяя управлять процессами, например, изменять приоритет процесса или завершать его принудительно.

Unix-подобный

В операционных системах, подобных Unix, новые процессы создаются системным вызовом fork. PID возвращается родительскому процессу, что позволяет ему ссылаться на дочерний процесс в последующих вызовах функций. Родительский процесс может, например, ожидать завершения дочернего процесса с помощью функции waitpid или завершить процесс с помощью kill.

Существуют две задачи с особо выделенными идентификаторами процессов: swapper или sched имеет идентификатор процесса 0 и отвечает за подкачку, фактически являясь частью ядра, а не обычным процессом пользовательского режима. Идентификатор процесса 1 обычно принадлежит процессу init, который в основном отвечает за запуск и остановку системы. Изначально идентификатор процесса 1 не был специально зарезервирован для init какими-либо техническими средствами: он просто получил этот ID как естественное следствие того, что он был первым процессом, вызванным ядром. Более современные Unix-системы обычно имеют дополнительные компоненты ядра, видимые как «процессы», в этом случае PID 1 активно резервируется для процесса init для обеспечения совместимости со старыми системами. Идентификаторы процессов, как правило, выделяются последовательно, начиная с 0 и увеличиваясь до максимального значения, которое варьируется в зависимости от системы. После достижения этого предела выделение перезапускается с 300 и снова увеличивается. В macOS и HP-UX выделение перезапускается со 100. Однако при этом и последующих проходах пропускаются все PID, которые все еще назначены процессам. Некоторые считают это потенциальной уязвимостью безопасности, поскольку это позволяет извлекать информацию о системе или скрытно передавать сообщения между процессами. Поэтому реализации, уделяющие особое внимание безопасности, могут выбрать другой метод назначения PID. В некоторых системах, таких как MPE/iX, используется наименьший доступный PID, иногда для минимизации количества страниц ядра, содержащих информацию о процессах, в памяти. Текущий идентификатор процесса предоставляется системным вызовом getpid или в виде переменной $$ в оболочке. Идентификатор процесса родительского процесса можно получить с помощью системного вызова getppid. В Linux максимальный идентификатор процесса указан в псевдофайле /proc/sys/kernel/pid_max.

Пидфайл

Некоторые процессы, например, музыкальный проигрыватель moc и демон MySQL, записывают свой PID в задокументированное местоположение файла, чтобы другие процессы могли его найти.

Microsoft Windows

В семействе операционных систем Windows можно получить идентификатор текущего процесса, используя функцию GetCurrentProcessId из Windows API, а идентификатор других процессов – используя GetProcessId. Внутри системы идентификатор процесса называется клиентским идентификатором и выделяется из того же пространства имен, что и идентификаторы потоков, поэтому они никогда не пересекаются. Процессу системы в режиме простоя присваивается идентификатор процесса 0. Системному процессу присваивается идентификатор процесса 8 в Windows 2000 и 4 в Windows XP и Windows Server 2003. В семействе операционных систем Windows NT идентификаторы процессов и потоков являются кратными 4, однако это не является частью спецификации.