Niewiele tu do umieszczenia w ciele.
Niewiele tu do umieszczenia w ciele.
Odpowiedzi:
Procesy muszą mieć element nadrzędny (PPID). Jądro, mimo że nie jest prawdziwym procesem, ręcznie wykonuje niektóre rzeczywiste procesy, takie jak przynajmniej init, i nadaje sobie identyfikator procesu 0. W zależności od systemu operacyjnego może być wyświetlany lub nie jako proces pswyjściowy, ale zawsze jest wyświetlany jako PPID:
np. w systemie 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]
...
w systemie 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
...
Zauważ też, że pid 0(i -1inne ujemne wartości w tym zakresie) mają różne znaczenia w zależności od tego, jak funkcja ich używa kill, forkoraz waitpid.
Wreszcie, chociaż initproces ten jest tradycyjnie nazywany pid #1, nie ma to już miejsca, gdy wirtualizacja na poziomie systemu operacyjnego jest używana jak strefy Solaris, ponieważ może być inituruchomionych więcej niż jeden :
$ 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
Istnieją dwa zadania ze specjalnie wyróżnianymi identyfikatorami procesów: swapper lub harmonogram ma identyfikator procesu 0 i jest odpowiedzialny za stronicowanie, tak jak jlliagre w poprzednich przykładach, i faktycznie jest częścią jądra, a nie normalnym procesem w trybie użytkownika.
Identyfikator procesu 1 jest zwykle procesem inicjującym odpowiedzialnym przede wszystkim za uruchamianie i zamykanie systemu. Początkowo identyfikator procesu 1 nie był specjalnie zarezerwowany dla init za pomocą jakichkolwiek środków technicznych: po prostu miał ten identyfikator jako naturalną konsekwencję bycia pierwszym procesem wywoływanym przez jądro. Nowsze systemy uniksowe zazwyczaj mają dodatkowe komponenty jądra widoczne jako „procesy”, w którym to przypadku PID 1 jest aktywnie zarezerwowany dla procesu init, aby zachować spójność ze starszymi systemami.
Ogólnie 0 jest często używane do oznaczenia „zerowego odniesienia”. Oznaczało to, że chociaż istnieje wartość 0, możesz jej nie użyć, ponieważ chcesz, aby zero oznaczało wartość specjalną.
pid0 ma specjalne znaczenie dlakill(2)wywołania systemowego gdzie to znaczy ja iwaitpid(2)gdzie to oznacza jakikolwiek proces w mojej grupie procesowej co najmniej. Nie wspominając, żefork()powrót0oznacza, że jesteśmy w dziecku.