Nei sistemi operativi Unix-like, i nuovi processi sono creati dalla chiamata di sistema fork()
. Il PID viene restituito al processo genitore, permettendogli di fare riferimento al figlio in ulteriori chiamate di funzione. Il genitore può, per esempio, aspettare che il figlio termini con la funzione waitpid()
, o terminare il processo con kill()
.
Ci sono due compiti con ID di processo appositamente distinti: swapper o sched ha l’ID di processo 0 ed è responsabile della paginazione, ed è effettivamente parte del kernel piuttosto che un normale processo in modalità utente. L’ID di processo 1 è di solito il processo init responsabile principalmente dell’avvio e dello spegnimento del sistema. Originariamente, l’ID del processo 1 non era specificamente riservato a init da nessuna misura tecnica: semplicemente aveva questo ID come conseguenza naturale dell’essere il primo processo invocato dal kernel. Sistemi Unix più recenti hanno tipicamente componenti aggiuntivi del kernel visibili come ‘processi’, nel qual caso il PID 1 è attivamente riservato al processo init per mantenere la coerenza con i sistemi più vecchi.
Gli ID di processo, in primo luogo, sono di solito assegnati su base sequenziale, a partire da 0 e fino a un valore massimo che varia da sistema a sistema. Una volta raggiunto questo limite, l’allocazione riparte da 300 e aumenta ancora. In macOS e HP-UX, l’allocazione riparte da 100. Tuttavia, per questo e per i successivi passaggi, qualsiasi PID ancora assegnato ai processi viene saltato. Alcuni considerano questo come una potenziale vulnerabilità di sicurezza, in quanto permette l’estrazione di informazioni sul sistema, o il passaggio segreto di messaggi tra i processi. Come tale, le implementazioni che sono particolarmente preoccupate per la sicurezza possono scegliere un metodo diverso di assegnazione dei PID. Su alcuni sistemi, come MPE/iX, viene usato il più basso PID disponibile, a volte nel tentativo di minimizzare il numero di pagine del kernel di informazioni sui processi in memoria.
L’ID del processo corrente è fornito da una getpid()
chiamata di sistema, o come variabile $$
nella shell. L’ID del processo di un processo padre è ottenibile con una getppid()
chiamata di sistema.
Su Linux, l’ID massimo del processo è dato dallo pseudo-file /proc/sys/kernel/pid_max
.
PidfileEdit
Alcuni processi, per esempio il lettore musicale moc e il demone MySQL, scrivono il loro PID in un file documentato, per permettere ad altri processi di cercarlo.