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 ps
output 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 -1
altri valori negativi per quella materia) hanno significati diversi a seconda della funzione che li usano come kill
, fork
e waitpid
.
Infine, mentre il init
processo 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 init
esecuzione:
$ 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.
pid
0 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()
tornare0
significa che siamo nel bambino.