Pas grand chose à mettre ici dans le corps.
Pas grand chose à mettre ici dans le corps.
Réponses:
Les processus doivent avoir un parent (PPID). Le noyau, bien qu'il ne s'agisse pas d'un processus réel, crée néanmoins à la main des processus réels comme au moins init et se donne l'ID de processus 0. Selon le système d'exploitation, il peut ou non s'afficher en tant que processus en ps
sortie, mais il est toujours affiché. comme PPID:
par exemple sous 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]
...
sur 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
...
Notez également que pid 0
(et d' -1
autres valeurs négatives d'ailleurs) ont des significations différentes selon la fonction qui les utilise kill
, fork
et waitpid
.
Enfin, alors que le init
processus est traditionnellement donné pid #1
, ce n'est plus le cas lorsque la virtualisation au niveau du système d'exploitation est utilisée comme les zones Solaris, car il peut y avoir plus d'une init
exécution:
$ 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
Il y a deux tâches avec des ID de processus spécialement distingués: swapper ou sched a l'ID de processus 0 et est responsable de la pagination, comme jlliagre mis dans les exemples précédents, et fait en fait partie du noyau plutôt qu'un processus normal en mode utilisateur.
L'ID de processus 1 est généralement le processus d'initialisation principalement responsable du démarrage et de l'arrêt du système. À l'origine, l'ID de processus 1 n'était pas spécifiquement réservé à init par des mesures techniques: il avait simplement cet ID comme conséquence naturelle d'être le premier processus invoqué par le noyau. Les systèmes Unix plus récents ont généralement des composants de noyau supplémentaires visibles en tant que «processus», auquel cas le PID 1 est activement réservé au processus init pour maintenir la cohérence avec les systèmes plus anciens.
En général, 0 est souvent utilisé pour signifier une «référence nulle». Cela signifie que même si la valeur 0 existe, vous ne pouvez pas l'utiliser car vous voulez que zéro signifie une valeur spéciale.
pid
0 a une signification particulière pour l'kill(2)
appel système où cela signifie que moi - même etwaitpid(2)
où cela signifie tout processus dans mon groupe de processus au moins. Sans oublier que lefork()
retour0
signifie que nous sommes dans l'enfant.