Qual è il valore massimo dell'ID processo?


42

Qual è il valore massimo dell'ID processo?

Inoltre, è possibile modificare un ID processo?

Risposte:


61

Su Linux, puoi trovare il valore PID massimo per il tuo sistema con questo:

$ cat /proc/sys/kernel/pid_max

Questo valore può anche essere scritto usando lo stesso file, tuttavia il valore può essere esteso solo fino ad un massimo teorico di 32768 per sistemi a 32 bit o 4194304 per 64 bit:

$ echo 32768 > /proc/sys/kernel/pid_max

Sembra essere pratica normativa sulla maggior parte dei sistemi a 64 bit impostare questo valore sullo stesso valore che si trova sui sistemi a 32 bit, ma questo è per convenzione piuttosto che un requisito.

Da man 5 proc:

/proc/sys/kernel/pid_max  
  This file (new in Linux 2.5) specifies the value at which PIDs wrap around
  (i.e., the value in this file is one greater than the maximum PID). The
  default value for this file, 32768, results in the same range of PIDs as
  on earlier kernels. On 32-bit platfroms, 32768 is the maximum value for
  pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22
  (PID_MAX_LIMIT, approximately 4 million).

E no, non è possibile modificare il PID di un processo in esecuzione. Viene assegnato come numero sequenziale dal kernel al momento dell'avvio del processo e questo è l'identificatore da quel momento in poi. L'unica cosa che potresti fare per ottenerne uno nuovo è avere il tuo fork di codice un nuovo processo e terminare quello vecchio.


e possiamo essere certi dei bit del kernel con questo
Aquarius Power,

2
Un curioso semi-controesempio alla storia "impossibile cambiare il PID" è il caso di un programma multithread, in cui uno dei thread ausiliari esegue un exec (). Sovrappone l'intero processo, ma cambia il PID (nel TID del thread in esecuzione).
fche,

3
Il valore massimo di un PID per la macchina a 32 bit è 32767, non 32768. 0 è lo scheduler e 1 è init, quindi i processi utente ottengono da 2 a 32767.

2
user129258 ha ragione, e in accordo con la pagina di manuale e il documento del kernel. Il valore massimo consentito di un PID , come richiesto dalla domanda, è uno in meno del valore in quello pseudo-file.
JdeBP,

1
@ user129258, questo vale solo se stai usando init. C'è sempre la possibilità di avviare direttamente una shell, diciamo busybox e fare le cose manualmente da lì senza controllo del lavoro. O anche avere alcuni script di avvio e tornare alla shell. In ogni caso, in questo caso la shell sarà PID 1.
Tim

9

Altre risposte hanno spiegato

  • /proc/sys/kernel/pid_max per Linux e
  • 99999 per FreeBSD

Ma la domanda non specificava un sistema operativo. Quindi eccone alcuni altri:

  • Su Solaris, il valore massimo di un ID processo è un parametro sintonizzabile del kernel - pidmaxin /etc/system- che per impostazione predefinita è 30.000 e che può essere impostato tra 266 e 999.999. Si noti che non lo è max_nprocs, che è un parametro sintonizzabile del kernel con una funzione leggermente diversa.
  • Su HP-UX 10 i parametri sintonizzabili del kernel hanno nominato process_id_mine process_id_maxprescrivono la gamma di ID di processo consentiti.
  • Su AIX, gli ID processo comprendono diversi campi, tra cui uno "slot di processo" e un campo "conteggio generazione". Il valore massimo possibile è 0x03FFFFFE, poiché i campi occupano solo i 26 bit inferiori di un numero intero e il bit # 0 è sempre zero, tranne per il processo n. 1.
  • Su OpenBSD il massimo è 32766.
  • Su NetBSD il massimo è 30000.

A partire da OpenBSD 6.5, il massimo è ora 99999 secondo l'introduzione (2), non 32766.
Kaiepi,

4

Su FreeBSD il valore di PID è compreso tra 0 e 99999 secondo intro(2)(link) . Ecco una citazione dal manuale:

ID processo.
Ogni processo attivo nel sistema è identificato in modo univoco da un numero intero non negativo chiamato ID processo. L'intervallo di questo ID è compreso tra 0 e 99999.

Se vuoi leggere il codice sorgente da solo, allora PID_MAXè definito in sys/sys/proc.h(link) .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.