Nicht viel hier in den Körper zu stecken.
Nicht viel hier in den Körper zu stecken.
Antworten:
Prozesse müssen eine übergeordnete (PPID) haben. Obwohl der Kernel kein echter Prozess ist, fertigt er einige echte Prozesse wie mindestens init von Hand und gibt sich die Prozess-ID 0. Abhängig vom Betriebssystem wird er möglicherweise als Prozess in der psAusgabe angezeigt oder auch nicht, wird aber immer angezeigt als PPID:
zB unter 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]
...
unter 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
...
Beachten Sie auch , dass pid 0(und -1und andere negative Werte für diese Angelegenheit) haben unterschiedliche Bedeutungen je nachdem , was Funktion nutzen sie mögen kill, forkund waitpid.
Obwohl der initProzess traditionell mit pid angegeben wird #1, ist dies nicht mehr der Fall, wenn Virtualisierung auf Betriebssystemebene wie Solaris-Zonen verwendet wird, da mehrere initausgeführt werden können:
$ 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
Es gibt zwei Tasks mit speziell definierten Prozess-IDs: swapper oder sched hat die Prozess-ID 0 und ist für das Paging verantwortlich, wie in den vorherigen Beispielen beschrieben, und ist eher Teil des Kernels als ein normaler Prozess im Benutzermodus.
Die Prozess-ID 1 ist normalerweise der Initialisierungsprozess, der hauptsächlich für das Starten und Herunterfahren des Systems verantwortlich ist. Ursprünglich war die Prozess-ID 1 durch keine technischen Maßnahmen speziell für init reserviert: Sie hatte lediglich diese ID als natürliche Folge des ersten vom Kernel aufgerufenen Prozesses. Neuere Unix-Systeme haben in der Regel zusätzliche Kernel-Komponenten, die als "Prozesse" angezeigt werden. In diesem Fall ist PID 1 aktiv für den Init-Prozess reserviert, um die Konsistenz mit älteren Systemen zu gewährleisten.
Im Allgemeinen wird 0 häufig verwendet, um eine Nullreferenz zu kennzeichnen. Dies bedeutet, dass der Wert 0 möglicherweise nicht verwendet wird, da Null einen bestimmten Wert kennzeichnen soll.
pid0 hat eine besondere Bedeutung für denkill(2)Systemaufruf, bei dem es sich um mich selbst handelt und beiwaitpid(2)dem es sich mindestens um einen Prozess in meiner Prozessgruppe handelt . Ganz zu schweigen davon, dass diefork()Rückkehr0bedeutet, dass wir im Kind sind.