Введение
Число, используемое ядрами операционных систем для идентификации активного процесса.
В информатике идентификатор процесса (также известный как ID процесса или PID) — это число, используемое большинством ядер операционных систем, таких как Unix, macOS и Windows, для уникальной идентификации активного процесса. Это число может использоваться как параметр в различных вызовах функций, позволяя управлять процессами, например, изменять приоритет процесса или завершать его принудительно.
Unix-подобный
В операционных системах, подобных Unix, новые процессы создаются системным вызовом fork. PID возвращается родительскому процессу, что позволяет ему ссылаться на дочерний процесс в последующих вызовах функций. Родительский процесс может, например, ожидать завершения дочернего процесса с помощью функции waitpid или завершить процесс с помощью kill.
There are two tasks with specially distinguished process IDs: swapper or sched has process ID 0 and is responsible for paging, and is actually part of the kernel rather than a normal user mode process. Process ID 1 is usually the init process primarily responsible for starting and shutting down the system. Originally, process ID 1 was not specifically reserved for init by any technical measures: it simply had this ID as a natural consequence of being the first process invoked by the kernel. More recent Unix systems typically have additional kernel components visible as 'processes', in which case PID 1 is actively reserved for the init process to maintain consistency with older systems. Process IDs, in the first place, are usually allocated on a sequential basis, beginning at 0 and rising to a maximum value which varies from system to system. Once this limit is reached, allocation restarts at 300 and again increases. In macOS and HP UX, allocation restarts at 100. However, for this and subsequent passes any PIDs still assigned to processes are skipped. Some consider this to be a potential security vulnerability in that it allows information about the system to be extracted, or messages to be covertly passed between processes. As such, implementations that are particularly concerned about security may choose a different method of PID assignment. On some systems, like MPE/iX, the lowest available PID is used, sometimes in an effort to minimize the number of process information kernel pages in memory. The current process ID is provided by a getpid system call, or as a variable $$ in shell. The process ID of a parent process is obtainable by a getppid system call. On Linux, the maximum process ID is given by the pseudo file /proc/sys/kernel/pid max.
Существуют две задачи с особо выделенными идентификаторами процессов: 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.
There are two tasks with specially distinguished process IDs: swapper or sched has process ID 0 and is responsible for paging, and is actually part of the kernel rather than a normal user mode process. Process ID 1 is usually the init process primarily responsible for starting and shutting down the system. Originally, process ID 1 was not specifically reserved for init by any technical measures: it simply had this ID as a natural consequence of being the first process invoked by the kernel. More recent Unix systems typically have additional kernel components visible as 'processes', in which case PID 1 is actively reserved for the init process to maintain consistency with older systems. Process IDs, in the first place, are usually allocated on a sequential basis, beginning at 0 and rising to a maximum value which varies from system to system. Once this limit is reached, allocation restarts at 300 and again increases. In macOS and HP UX, allocation restarts at 100. However, for this and subsequent passes any PIDs still assigned to processes are skipped. Some consider this to be a potential security vulnerability in that it allows information about the system to be extracted, or messages to be covertly passed between processes. As such, implementations that are particularly concerned about security may choose a different method of PID assignment. On some systems, like MPE/iX, the lowest available PID is used, sometimes in an effort to minimize the number of process information kernel pages in memory. The current process ID is provided by a getpid system call, or as a variable $$ in shell. The process ID of a parent process is obtainable by a getppid system call. On Linux, the maximum process ID is given by the pseudo file /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, однако это не является частью спецификации.