pid0 ma specjalne znaczenie dla kill(2)wywołania systemowego gdzie to znaczy ja i waitpid(2)gdzie to oznacza jakikolwiek proces w mojej grupie procesowej co najmniej. Nie wspominając, że fork()powrót 0oznacza, że jesteśmy w dziecku.
Stéphane Chazelas,
1
powinieneś opublikować to jako odpowiedź
Jonathan Muller,
3
Zero powoduje, że flagi są automatycznie ustawiane w większości rejestrów statusu procesora, gdy jest on ładowany do rejestru, umożliwiając oddziałowi pobranie go bez specjalnego porównywania / testowania. Dlatego jest bardzo często używany jako wartość „wartownika”, tj. Wartość, która oznacza tutaj „nieprawidłowy”, „koniec danych” lub „przypadek specjalny”. Więc nawet jeśli komputery zaczną liczyć na 0, będzie wiele przypadków, w których 1 jest pierwszą poprawną wartością dla danej aplikacji lub struktury danych.
LawrenceC,
4
Uwaga dodatkowa: komputery nie zaczynają odliczać od zera. Wiele języków programowania i wierzę, że wszystkie języki maszynowe używają przesunięć, podczas gdy inni (i większość ludzi) używają indeksów, ale bez względu na to, liczenie się liczy. Tablica z dwoma elementami ma dwa elementy (policz je), bez względu na to, czy Twój język odwołuje się do nich przez offset, czy przez indeks.
jthill
jest to prawdopodobnie przypadek przeciwstawnego paradygmatu programowania: grawitacja programisty w kierunku specjalnych wartości flag (zero, ujemna) przewyższa mniejszą skłonność skłonności do zerowania systemów numeracji.
Michael
Odpowiedzi:
29
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:
$ 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 :
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.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:
w systemie Solaris:
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żywakill
,fork
orazwaitpid
.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 :źródło
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.
źródło
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ą.
źródło