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 ps
Ausgabe 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 -1
und andere negative Werte für diese Angelegenheit) haben unterschiedliche Bedeutungen je nachdem , was Funktion nutzen sie mögen kill
, fork
und waitpid
.
Obwohl der init
Prozess traditionell mit pid angegeben wird #1
, ist dies nicht mehr der Fall, wenn Virtualisierung auf Betriebssystemebene wie Solaris-Zonen verwendet wird, da mehrere init
ausgefü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.
pid
0 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ückkehr0
bedeutet, dass wir im Kind sind.