Jaka jest maksymalna wartość identyfikatora procesu?
Czy można również zmienić identyfikator procesu?
W systemie Linux możesz znaleźć maksymalną wartość PID dla swojego systemu dzięki:
$ cat /proc/sys/kernel/pid_max
Tę wartość można również zapisać przy użyciu tego samego pliku, jednak wartość tę można rozszerzyć tylko do teoretycznego maksimum 32768 dla systemów 32-bitowych lub 4194304 dla 64-bitowych:
$ echo 32768 > /proc/sys/kernel/pid_max
Wydaje się, że normatywną praktyką w większości systemów 64-bitowych jest ustawianie tej wartości na tę samą wartość, co w systemach 32-bitowych, ale jest to raczej konwencja niż wymóg.
Od man 5 proc
:
/proc/sys/kernel/pid_max This file (new in Linux 2.5) specifies the value at which PIDs wrap around (i.e., the value in this file is one greater than the maximum PID). The default value for this file, 32768, results in the same range of PIDs as on earlier kernels. On 32-bit platfroms, 32768 is the maximum value for pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22 (PID_MAX_LIMIT, approximately 4 million).
I nie, nie możesz zmienić PID uruchomionego procesu. Jądro przypisuje mu numer sekwencyjny w momencie rozpoczęcia procesu i jest to jego identyfikator od tego czasu. Jedyną rzeczą, którą możesz zrobić, aby uzyskać nowy, jest rozwidlenie kodu nowego procesu i zakończenie starego.
Inne odpowiedzi wyjaśniły
/proc/sys/kernel/pid_max
dla systemu Linux iAle pytanie nie określało systemu operacyjnego. Oto kilka innych:
pidmax
w/etc/system
- że domyślnie 30000, które można ustawić w dowolnym miejscu pomiędzy 266 a 999.999. Zauważ, że niemax_nprocs
jest to parametr dostrajany przez jądro z subtelnie inną funkcją.process_id_min
iprocess_id_max
określają zakres dozwolonych identyfikatorów procesów.źródło
Na FreeBSD wartość PID wynosi od 0 do 99999 zgodnie z
intro(2)
(link) . Oto cytat z instrukcji:Jeśli chcesz czytać kod źródłowy samodzielnie, to
PID_MAX
jest zdefiniowany wsys/sys/proc.h
(link) .źródło