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 ps
wyjś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 -1
inne ujemne wartości w tym zakresie) mają różne znaczenia w zależności od tego, jak funkcja ich używa kill
, fork
oraz waitpid
.
Wreszcie, chociaż init
proces 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ć init
uruchomionych 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ą.
pid
0 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ót0
oznacza, że jesteśmy w dziecku.