Se digitiamo ps -ef
, otteniamo un elenco di processi. Perché i numeri PID non sono continui?
Se digitiamo ps -ef
, otteniamo un elenco di processi. Perché i numeri PID non sono continui?
Risposte:
Su Ubuntu sono continui. Su altri sistemi operativi potrebbe essere diverso.
Il kernel alloca PID nell'intervallo di (RESERVED_PIDS, PID_MAX_DEFAULT). Lo fa in modo sequenziale in ogni spazio dei nomi (le attività in spazi dei nomi diversi possono avere gli stessi ID). Nel caso in cui l'intervallo sia esaurito, l'assegnazione del pid termina.
( /programming/3446727/how-does-linux-determine-the-next-pid )
Mente però ...
Alcuni argomenti su StackOverflow:
Nei commenti è un comando per testare l'assegnazione dei PID:
for i in {1..20}; do sh -c 'echo $$'; done
Normalmente il PID è continuo ma alcuni processi saranno interrotti appena si esegue il comando ps -ef
.
Inoltre alcuni processi potrebbero essere solo un sottoprocesso di un altro processo che non è mostrato nel ps -ef
comando. Per vedere alcuni risultati espansi e puoi controllare il PID continuo usa ilpstree
pstree -p
Uscita campione:
├─teamviewerd(3468)─┬─{teamviewerd}(3474)
│ ├─{teamviewerd}(3475)
│ ├─{teamviewerd}(3476)
│ ├─{teamviewerd}(3477)
│ ├─{teamviewerd}(3478)
mentre se esegui ps -ef
vedi solo il processo genitore.
$ ps -ef | grep teamviewerd
root 3468 1 0 Jul15 ? 00:07:38 /opt/teamviewer9/tv_bin/teamviewerd -f