Non c'è molto da mettere qui nel corpo.
Non c'è molto da mettere qui nel corpo.
Risposte:
I processi devono avere un genitore (PPID). Il kernel, nonostante non sia un processo reale, sta comunque realizzando alcuni processi reali come almeno init, e si sta dando l'ID di processo 0. A seconda del sistema operativo potrebbe essere visualizzato o meno come processo in psoutput ma viene sempre visualizzato come PPID:
ad es. su Linux:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:09 ? 00:00:00 /sbin/init
root 2 0 0 09:09 ? 00:00:00 [kthreadd]
root 3 2 0 09:09 ? 00:00:00 [ksoftirqd/0]
...
su Solaris:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 Oct 19 ? 0:01 sched
root 5 0 0 Oct 19 ? 11:20 zpool-rpool1
root 1 0 0 Oct 19 ? 0:13 /sbin/init
root 2 0 0 Oct 19 ? 0:07 pageout
root 3 0 1 Oct 19 ? 117:10 fsflush
root 341 1 0 Oct 19 ? 0:15 /usr/lib/hal/hald --daemon=yes
root 9 1 0 Oct 19 ? 0:59 /lib/svc/bin/svc.startd
...
Nota anche che pid 0(e -1altri valori negativi per quella materia) hanno significati diversi a seconda della funzione che li usano come kill, forke waitpid.
Infine, mentre il initprocesso viene tradizionalmente dato pid #1, questo non è più il caso quando la virtualizzazione a livello di sistema operativo viene utilizzata come le zone Solaris, poiché può essercene più di una in initesecuzione:
$ ps -ef|head
UID PID PPID C STIME TTY TIME CMD
root 4733 3949 0 11:07:25 ? 0:26 /lib/svc/bin/svc.configd
root 4731 3949 0 11:07:24 ? 0:06 /lib/svc/bin/svc.startd
root 3949 3949 0 11:07:14 ? 0:00 zsched
daemon 4856 3949 0 11:07:46 ? 0:00 /lib/crypto/kcfd
root 4573 3949 0 11:07:23 ? 0:00 /usr/sbin/init
netcfg 4790 3949 0 11:07:34 ? 0:00 /lib/inet/netcfgd
root 4868 3949 0 11:07:48 ? 0:00 /usr/lib/pfexecd
root 4897 3949 0 11:07:51 ? 0:00 /usr/lib/utmpd
netadm 4980 3949 0 11:07:54 ? 0:01 /lib/inet/nwamd
Esistono due attività con ID di processo particolarmente distinti: swapper o sched ha l'ID di processo 0 ed è responsabile del paging, come jlliagre messo negli esempi prima, ed è effettivamente parte del kernel piuttosto che un normale processo in modalità utente.
L'ID processo 1 è in genere il processo di init principalmente responsabile dell'avvio e dell'arresto del sistema. Inizialmente, l'ID processo 1 non era specificamente riservato per init da alcuna misura tecnica: aveva semplicemente questo ID come conseguenza naturale dell'essere il primo processo invocato dal kernel. I sistemi Unix più recenti in genere hanno componenti del kernel aggiuntivi visibili come "processi", nel qual caso il PID 1 è attivamente riservato al processo init per mantenere la coerenza con i sistemi più vecchi.
In generale, 0 viene spesso utilizzato per indicare un "riferimento null". Ciò significa che anche se esiste il valore 0, potresti non utilizzarlo perché vuoi che zero significhi un valore speciale.
pid0 ha un significato speciale per lakill(2)chiamata di sistema dove significa me stesso e perwaitpid(2)dove significa almeno qualsiasi processo nel mio gruppo di processi . Per non parlare del fatto chefork()tornare0significa che siamo nel bambino.