Číslo procesu
Číslo procesu (PID, anglicky process identifier) je v informatice číslo, pod kterým je v jádře operačního systému jednoznačně evidován proces. Čísla procesů používají jádra unixových systémů, Microsoft Windows, OS X i dalších. Číslo procesu je používáno v různých funkcích, které umožňují manipulovat s procesy (například měnit jejich prioritu nebo je ukončovat).
Unix-like systémy
V operačních systémech na bázi Unixu jsou nové procesy vytvářeny systémovým voláním fork()
. Číslo PID je vráceno rodičovskému procesu za účelem umožnění odkázání se na tento proces v dalších voláních. Rodičovský proces například může na dětský proces vyčkat pomocí systémového volání wait()
anebo tento proces pomocí volání kill()
ukončit.
V Unixových systémech existuje několik speciálních PID čísel. Swapper neboli sched má procesové číslo 0 a je zodpovědný za stránkování, ve skutečnosti se jedná o část jádra a ne o klasický uživatelský proces. Procesem číslo 1 je obvykle init proces, který se stará o nastartování a vypnutí systému. Původně nebylo pro tento proces číslo 1 nijak vyhrazeno žádnými technickými opatřeními, měl číslo jedna pouze kvůli tomu, že se jednalo o první proces, který byl jádrem spuštěn. V nejnovějších Unixových systémech mají jádra typicky další komponenty viditelné jako procesy, což způsobilo nutnost aktivního vyhrazení čísla 1 pro init proces, aby byla dodržena konzistence se staršími systémy.
Čísla PID jsou procesům přidělována sekvenčně. Začínají od nuly a vzrůstají až do maximální systémem stanovené hodnoty (její konkrétní velikost se liší systém od systému). Jakmile je této hodnoty dosaženo, přiřazování čísel novým procesům začíná znovu od čísla 300 a proces se opakuje. V systémech macOS a HP-UX přiřazování začíná znovu od čísla 100. Čísla již přiřazená existujícím procesům se přeskakují. Některé systémy, mezi které patří například MPE/iX, používají nejnižší dostupné číslo PID ve snaze minimalizovat paměť zabranou informacemi o procesech.
Číslo současného procesu může být získáno pomocí volání getpid()
anebo pomocí proměnné $$
ve shellu. Číslo rodičovského procesu je dostupné pomocí systémového volní getppid()
.
V operačním systému Linux lze získat maximální přidělené PID pomocí pseudosouboru /proc/sys/kernel/pid_max
.[1]
Microsoft Windows
Na systémech typu Microsoft Windows může být získáno číslo současného procesu pomocí API funkce GetCurrentProcessID()
[2] a čísla ostatních procesů pomocí API funkce GetProcessID()
[3].
Interně jsou čísla procesů nazývána jako ID klienta (angl. client ID) a jsou přidělována ze stejného prostoru, jako čísla vláken, což znamená, že tyto čísla se nepřekrývají. Procesu nazývanému System Idle Process je rezervováno PID 0 a procesu nazývanému System Process je rezervováno číslo 4. V Některých verzích systému Windows jsou identifikátory procesu a vláken násobky 4, ale není to specifikováno ve specifikaci. [4]
Soubory .pid
Některé procesy, například MySQL démon, zapisují jejich číslo PID do PID souboru se známou lokací, aby umožnily dalším procesům je vyhledat.
Související články
Reference
V tomto článku byl použit překlad textu z článku Process identifier na anglické Wikipedii.
- proc(5). www.tin.org [online]. [cit. 2017-02-13]. Dostupné online.
- GetCurrentProcessId function (Windows). msdn.microsoft.com [online]. [cit. 2017-02-13]. Dostupné online. (anglicky)
- GetProcessId function (Windows). msdn.microsoft.com [online]. [cit. 2017-02-13]. Dostupné online. (anglicky)
- Why are process and thread IDs multiples of four?. The Old New Thing. Dostupné online [cit. 2017-02-13]. (anglicky)