pid0 a une signification particulière pour l' kill(2)appel système où cela signifie que moi - même et waitpid(2)où cela signifie tout processus dans mon groupe de processus au moins. Sans oublier que le fork()retour 0signifie que nous sommes dans l'enfant.
Stéphane Chazelas
1
vous devriez poster ceci comme une réponse
Jonathan Muller
3
Zéro entraîne la définition automatique d'indicateurs sur la plupart des registres d'état du processeur lorsqu'il est chargé dans un registre, ce qui permet à une branche de s'y attaquer sans la comparer / le tester spécifiquement. Par conséquent, il est très utilisé comme valeur "sentinelle", c'est-à-dire une valeur qui signifie "invalide", "fin des données" ou "cas spécial" ici. Ainsi, même si les ordinateurs commencent à compter à 0, il y aura de nombreux cas où 1 est la première valeur valide pour l'application ou la structure de données en question.
LawrenceC
4
Remarque: les ordinateurs ne commencent pas à compter à zéro. De nombreux langages de programmation et je crois que tous les langages machine utilisent des décalages là où d'autres (et la plupart des humains) utilisent des index mais, quoi qu'il en soit, compter c'est compter. Un tableau à deux éléments a deux éléments (comptez-les), que votre langue s'y réfère par décalage ou par index.
jthill
il s'agit probablement d'un cas de paradigmes sous-jacents de programmation opposés: la gravitation du programmeur vers des valeurs de drapeau spéciales (zéro, un négatif) l'emporte sur la moindre attraction d'une propension pour les systèmes de numérotation à base zéro.
michael
Réponses:
29
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 pssortie, mais il est toujours affiché. comme PPID:
$ 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' -1autres valeurs négatives d'ailleurs) ont des significations différentes selon la fonction qui les utilise kill, forket waitpid.
Enfin, alors que le initprocessus 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 initexécution:
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.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:
sur Solaris:
Notez également que pid
0
(et d'-1
autres valeurs négatives d'ailleurs) ont des significations différentes selon la fonction qui les utilisekill
,fork
etwaitpid
.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'uneinit
exécution:la source
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.
la source
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.
la source