NAZWA¶
proc - pseudosystem plików z informacjami o procesach
OPIS¶
proc jest pseudosystemem plików, który udostępnia
interfejs do struktur danych jądra. Zazwyczaj jest montowany w katalogu
/proc. Jest on w większości przeznaczony tylko do
odczytu, lecz niektóre pliki umożliwiają modyfikacje
zmiennych jądra.
Poniższa lista opisuje wiele plików i katalogów w
hierarchii
/proc.
- /proc/[pid]
- Każdemu działającemu procesowi odpowiada katalog o
numerycznej nazwie; nazwą tą jest identyfikator procesu.
Każdy z tych katalogów zawiera następujące
pseudopliki i podkatalogi:
- /proc/[pid]/auxv (od wersji jądra 2.6.0-test7)
- Zawartość informacji ELF przekazanej do procesu podczas
uruchomienia. Formatem jest jeden identyfikator w postaci unsigned
long plus jedna wartość unsigned long dla
każdego wpisu. Ostatni wpis zawiera dwa zera. Zob. też
getauxval(3).
- /proc/[pid]/cgroup (od Linuksa 2.6.24)
- Plik opisuje grupy kontrolne do których należy
proces/zadanie. W każdej hierarchi cgroup istnieje jeden wpis
zawierający pola oddzielone dwukropkiem w postaci:
5:cpuacct,cpu,cpuset:/daemons
- Pola oddzielone dwukropkiem, od lewej do prawej:
- 1.
- numer identyfikacyjny hierarchii
- 2.
- zestaw podsystemów ograniczony do hierarchi
- 3.
- grupa kontrolna w hierarchii do której należy proces
- Ten plik istnieje tylko jeśli podczas kompilacji jądra
włączono opcję CONFIG_CGROUPS.
- /proc/[pid]/clear_refs (od Linuksa 2.6.22)
-
Plik jest tylko do odczytu, zapisywalny wyłącznie dla
właściciela procesu.
Do pliku można zapisać następujące
wartości:
- 1 (od Linuksa 2.6.22)
- Resetuje bity PG_Referenced i ACCESSED/YOUNG dla wszystkich stron
związanych z procesem (przed jądrem 2.6.32 taki efekt
powodowało zapisanie dowolnej wartości niezerowej).
- 2 (od Linuksa 2.6.32)
- Resetuje bity PG_Referenced i ACCESSED/YOUNG dla wszystkich stron
anonimowych związanych z procesem.
- 3 (od Linuksa 2.6.32)
- Resetuje bity PG_Referenced i ACCESSED/YOUNG dla wszystkich stron
przypisanych do plików, związanych z procesem.
- Czyszczenie bitów PG_Referenced i ACCESSED/YOUNG zapewnia
metodę zmierzenia przybliżonej wartości
pamięci używanej przez proces. Najpierw należy
sprawdzić wartość w polu "Referenced" dla
wartości VMA pokazanych w /proc/[pid]/smaps aby
sprawdzić użycie pamięci przez proces.
Następnie czyści się bity PG_Referenced i
ACCESSED/YOUNG i po jakimś zmierzonym czasie ponownie sprawdza
się wartości pól "Referenced" aby
dowiedzieć się jak zmieniło się użycie
pamięci procesu podczas zmierzonego interwału. Jeśli
jest się zainteresowanym wyłącznie pewnymi typami
przypisania, można skorzystać z wartości 2 lub 3,
zamiast 1.
Aby zmienić inny bit można zapisać
również inną wartość:
- 4 (od Linuksa 3.11)
- Czyści bit soft-dirty dla wszystkich stron związanych z
procesem. Używa się tego (razem z
/proc/[pid]/pagemap) przez system przywracania check-point do
wykrycia które strony procesu zostały "zabrudzone"
od czasu zapisu do pliku /proc/[pid]/clear_refs.
- Zapis innej wartości niż wypisane powyżej do
/proc/[pid]/clear_refs nie daje żadnego efektu.
Plik /proc/[pid]/clear_refs istnieje tylko jeśli podczas
kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/[pid]/cmdline
- Ten plik tylko do odczytu zawiera pełną linię
polecenia wydanego przy uruchamianiu procesu, chyba że jest to
proces-duch (zombie). Wówczas plik będzie pusty, tzn. odczyt
tego pliku zwróci zawsze 0 znaków. Argumenty linii
poleceń występują w tym pliku rozdzielone znakami NUL
('\0'), z dodatkowym znakiem NUL po ostatnim łańcuchu.
- /proc/[pid]/comm (od Linuksa 2.6.33)
- Plik pokazuje wartość comm procesu—tj.
nazwę polecenia związaną z procesem.
Różne wątki tego samego procesu mogą
mieć różne wartości comm,
dostępne za pomocą /proc/[pid]/task/[tid]/comm.
Wątek może zmodyfikować jego wartość
comm lub tą innego wątku z tej samej grupy
wątków (zob. opis CLONE_THREAD w clone(2)),
pisząc do pliku /proc/self/task/[tid]/comm.
Łańcuchy dłuższe niż
TASK_COMM_LEN (16) znaków są po cichu obcinane.
Plik zapewnia zestaw operacji PR_SET_NAME i PR_GET_NAME
prctl(2) i jest używany przez pthread_setname_np(3),
przy zmianie nazw wątków innych niż
wywołujący.
- /proc/[pid]/coredump_filter (od wersji jądra 2.6.23)
- Patrz core(5).
- /proc/[pid]/cpuset (od wersji jądra 2.6.12)
- Patrz cpuset(7).
- /proc/[pid]/cwd
- Jest dowiązaniem do bieżącego katalogu roboczego
procesu. Aby dowiedzieć się, jaki jest katalog roboczy
procesu, na przykład o identyfikatorze 20, można
wydać następujące polecenie:
$ cd /proc/20/cwd; /bin/pwd
Należy zauważyć, że polecenie pwd jest
często wbudowanym poleceniem powłoki i może nie
działać w tym kontekście w sposób
właściwy. W powłoce bash(1) można
użyć pwd -P.
W procesie wielowątkowym zawartość tego linku
symbolicznego nie jest dostępna, jeżeli wątek
główny już się zakończył
(zazwyczaj przez wywołanie pthread_exit(3)).
- /proc/[pid]/environ
- Plik ten zawiera środowisko procesu. Wpisy są oddzielone
znakami NULL ("\0"), mogą także
wystąpić znaki NULL na końcu. Dlatego, aby
wypisać zmienne środowiskowe procesu 1, należy
wykonać:
$ strings /proc/1/environ
- /proc/[pid]/exe
- W Linuksie 2.2 i wersjach późniejszych plik ten jest
dowiązaniem symbolicznym zawierającym rzeczywistą
nazwę ścieżki działającego polecenia.
Dowiązaniem symbolicznym można się normalnie
posługiwać - próba jego otwarcia otworzy plik
programu. Można nawet wydać polecenie
/proc/[pid]/exe, aby uruchomić kolejną kopię
tego samego procesu co [pid].W procesie wielowątkowym
zawartość tego linku symbolicznego nie jest dostępna,
jeżeli główny wątek już się
zakończył (wywołując zapewne
pthread_exit(3)).
W Linuksie 2.0 i wcześniejszych wersjach, /proc/[pid]/exe jest
wskaźnikiem do uruchomionego pliku binarnego i ma postać
dowiązania symbolicznego. Wywołanie readlink(2) na
tym pliku zwróci w Linuksie 2.0 łańcuch znakowy
postaci:
[urządzenie]:i-węzeł
Na przykład, [0301]:1502 będzie 1502 i-węzłem na
urządzeniu o numerze głównym 03 (IDE, MFM itp.) i
pobocznym 01 (pierwsza partycja pierwszego dysku).
Do zlokalizowania pliku, można posłużyć
się poleceniem find(1) z opcją -inum.
- /proc/[pid]/fd/
- Jest to podkatalog zawierający po jednym wpisie dla każdego
otwartego przez proces pliku; nazwą tego wpisu jest deskryptor
pliku i jest on dowiązaniem symbolicznym do rzeczywistego pliku.
Dlatego 0 jest standardowym wejściem, 1 jest standardowym
wyjściem, 2 jest standardową diagnostyką, itd.
W przypadku deskryptorów plików potoków gniazd wpisy
będą dowiązaniami symbolicznymi, których
zawartością jest typ pliku z i-węzłem.
Wywołanie readlink(2) na takim pliku zwróci
ciąg w postaci:
typ:[i-węzeł]
Przykładowo socket:[2248868] będzie gniazdem z
i-węzłem 2248868. W przypadku gniazd, i-węzeł
można wykorzystać do pozyskania większej liczby
informacji z jednego z plików z katalogu /proc/net/.
W przypadku deskryptorów plików, które nie mają
odpowiadającego i-węzła (np. deskryptorów
plików tworzonych za pomocą epoll_create(2),
eventfd(2), inotify_init (2), signalfd(2) i
timerfd(2)), wpis będzie dowiązaniem symbolicznym z
zawartością w postaci
anon_inode:<typ-pliku>
W niektórych przypadkach typ-pliku jest otoczony nawiasami
kwadratowymi.
Przykładowo dowiązanie symboliczne deskryptora pliku epoll
będzie dowiązaniem symbolicznym, którego
zawartością jest łańcuch
anon_inode:[eventpoll].
W procesie wielowątkowym zawartość tego katalogu nie
jest dostępna, jeżeli wątek główny
już się zakończył (zazwyczaj przez
wywołanie pthread_exit(3)).
Programy, które przyjmują nazwę pliku jako argument
wiersza polecenia, lecz nie czytają standardowego wejścia,
jeśli nie podano argumentu albo które zapisują do
pliku nazwanego argumentem wiersza polecenia, lecz nie
wysyłają danych wyjściowych na standardowe
wyjście, można zmusić do używania
standardowego wejścia lub wyjścia wykorzystując
/proc/[pid]/fd. Na przykład, zakładając,
że opcja -i określa plik wejściowy, a opcja
-o określa plik wyjściowy:
$ foobar -i /proc/self/fd/0 -o /proc/self/fd/1 ...
co daje działający filtr.
/proc/self/fd/N jest w przybliżeniu tym samym co
/dev/fd/N na niektórych systemach uniksowych i
uniksopodobnych. Większość linuksowych
skryptów MAKEDEV tworzy dowiązania symboliczne
/dev/fd do /proc/self/fd.
Większość systemów udostępnia
dowiązania symboliczne /dev/stdin, /dev/stdout i
dev/stderr, które linkują odpowiednio do
plików 0, 1 i 2 w /proc/self/fd.
Powyższe, przykładowe polecenie może być
więc zapisane również tak:
$ foobar -i /dev/stdin -o /dev/stdout ...
- /proc/[pid]/fdinfo/ (od wersji jądra 2.6.22)
- Jest to podkatalog zawierający po jednym wpisie dla każdego
pliku otwartego przez proces; nazwą tego wpisu jest deskryptor
pliku. Zawartość pliku można odczytać, aby
uzyskać informacje o odpowiadającym mu deskryptorze pliku,
na przykład:
$ cat /proc/12015/fdinfo/4
pos: 1000
flags: 01002002
Pole pos jest liczbą dziesiętną
oznaczającą bieżące przesunięcie w
pliku. Pole flags jest liczbą ósemkową
zawierającą prawa dostępu do pliku i znaczniki stanu
(patrz open(2)).
Tylko właściciel procesu może odczytywać pliki z
tego katalogu.
- /proc/[pid]/io (od wersji jądra 2.6.20)
- Plik zawiera statystyki wejścia/wyjścia dla procesu np.:
# cat /proc/3828/io
rchar: 323934931
wchar: 323929600
syscr: 632687
syscw: 632675
read_bytes: 0
write_bytes: 323932160
cancelled_write_bytes: 0
Występują następujące pola:
- rchar: odczytane znaki
- Liczba bajtów, które zostały odczytane ze
względu na dane zadanie. Jest to suma bajtów z
read(2) i podobnych wywołań systemowych. Obejmuje
takie działania jak wejście/wyjście terminala. To,
czy konieczny był faktyczny dostęp do
wejścia/wyjściu fizycznego dysku nie ma wpływu na
wartość (odczyt mógł nastąpić
wyłącznie z bufora stronicowania).
- wchar: zapisane znaki
- Liczba bajtów, które zostały zapisane lub powinny
być zapisane przez dane zadania. Tego pola tyczą się
podobne zastrzeżenia jak rchar.
- syscr: odczytane wywołania systemowe
- Próba policzenia operacji odczytu wejścia/wyjścia tj.
wywołań systemowych takich jak read(2) i
pread(2).
- syscw: zapisane wywołania systemowe
- Próba policzenia operacji zapisu wejścia/wyjścia tj.
wywołań systemowych takich jak write(2) i
pwrite(2).
- read_bytes: odczytane bajty
- Próba policzenia bajtów, które faktycznie
musiały być pobrane z poziomu nośnika. Jest
dokładna dla systemów plików korzystających z
bloków.
- write_bytes: zapisane bajty
- Próba policzenia bajtów, które faktycznie
musiały być wysłane na poziom nośnika.
- cancelled_write_bytes:
- Dużą niedokładność powoduje
przycinanie. Jeśli proces zapisze do pliku 1 MB i
później skasuje go, de facto nie nastąpi żaden
zapis. Zostanie to jednak odnotowane jako powodujące zapis 1 MB.
Innymi słowy: pole to reprezentuje liczbę bajtów,
które dzięki temu procesowi nie wystąpiły
przez przycięcie bufora strony. Część
zadań może spowodować również
"ujemne" wejście/wyjście. Jeśli to zadanie
przytnie "brudny" bufor strony, część
wejścia/wyjście, które inne zadanie już
policzyło (jest w jego write_bytes) nie nastąpi.
- Uwaga: W obecnej implementacji ma miejsce wyścig bitowy na
32-bitowych systemach: jeśli proces A odczyta /proc/[pid]/io
procesu B, gdy proces B aktualizuje jeden ze swoich 64-bitowych
liczników, proces A zobaczy wynik pośredni.
- /proc/[pid]/limits (od wersji jądra 2.6.24)
- Plik zawiera informacje o miękkim limicie, twardym limicie i
jednostkach, w których mierzone są limity zasobów
procesów (patrz getrlimit(2)). Do Linuksa 2.6.35
(włącznie) plik jest zabezpieczony, aby pozwolić na
odczyt jedynie przez realny identyfikator UID procesu. Od wersji 2.6.36
plik jest odczytywalny dla wszystkich użytkowników
systemu.
- /proc/[pid]/map_files/ (od jądra 3.3)
- Podkatalog zawiera wpisy odnoszące się do plików
zmapowanych do pamięci (patrz mmap(2)). Wpisy są
nazwane jako pary adresów: początku i końca obszaru
pamięci (jako liczby szesnastkowe) i są dowiązaniami
symbolicznymi do samych zmapowanych plików. Oto przykład,
zmodyfikowany aby zmieścić się w 80 kolumnowym
terminalu:
$ ls -l /proc/self/map_files/
lr--------. 1 root root 64 Apr 16 21:31
3252e00000-3252e20000 -> /usr/lib64/ld-2.15.so
...
Choć te wpisy są dostępne dla obszarów
pamięci przydzielonych flagą MAP_FILE, to
sposób w jaki zaimplementowane jest anonimowe dzielenie
pamięci (obszary utworzone flagami MAP_ANON | MAP_SHARED)
oznaczają że tego typu obszary również
pojawią się w tym katalogu. Oto przykład, gdzie
plikiem docelowym jest usunięty /dev/zero:
lrw-------. 1 root root 64 Apr 16 21:33
7fc075d2f000-7fc075e6f000 -> /dev/zero (deleted)
Ten katalog istnieje tylko jeśli włączono opcję
konfiguracyjną jądra CONFIG_CHECKPOINT_RESTORE.
- /proc/[pid]/maps
- Plik zawierający aktualnie zmapowane obszary pamięci wraz z
prawami dostępu do nich. Więcej informacji o mapowaniu
pamięci zawiera podręcznik systemowy mmap(2).
Format pliku jest następujący:
adres uprawn przesun urządz i-węzeł ścieżka
00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemon
00651000-00652000 r--p 00051000 08:02 173521 /usr/bin/dbus-daemon
00652000-00655000 rw-p 00052000 08:02 173521 /usr/bin/dbus-daemon
00e03000-00e24000 rw-p 00000000 00:00 0 [heap]
00e24000-011f7000 rw-p 00000000 00:00 0 [heap]
...
35b1800000-35b1820000 r-xp 00000000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a1f000-35b1a20000 r--p 0001f000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a20000-35b1a21000 rw-p 00020000 08:02 135522 /usr/lib64/ld-2.15.so
35b1a21000-35b1a22000 rw-p 00000000 00:00 0
35b1c00000-35b1dac000 r-xp 00000000 08:02 135870 /usr/lib64/libc-2.15.so
35b1dac000-35b1fac000 ---p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so
35b1fac000-35b1fb0000 r--p 001ac000 08:02 135870 /usr/lib64/libc-2.15.so
35b1fb0000-35b1fb2000 rw-p 001b0000 08:02 135870 /usr/lib64/libc-2.15.so
...
f2c6ff8c000-7f2c7078c000 rw-p 00000000 00:00 0 [stack:986]
...
7fffb2c0d000-7fffb2c2e000 rw-p 00000000 00:00 0 [stack]
7fffb2d48000-7fffb2d49000 r-xp 00000000 00:00 0 [vdso]
Pole adres jest przestrzenią adresową procesu,
który ją zajmuje, a uprawn jest zbiorem
uprawnień:
r = odczyt
w = zapis
x = wykonywanie
s = wspólne
p = prywatne (kopiowane przy zapisie)
Przesun jest przesunięciem w pliku lub w czymś innym,
urządz zawiera numery (główny:poboczny)
urządzenia, a i-węzeł jest
i-węzłem na tym urządzeniu. 0 wskazuje, że nie
istnieje i-węzeł związany z tym obszarem
pamięci, jak to na przykład ma miejsce w przypadku segmentu
BSS (niezainicjowanych danych).
Ścieżka to zwykle plik zabezpieczający
mapowanie. Koordynacja jest łatwa w przypadku plików ELF za
pomocą pola przesun, poprzez sprawdzenie pola Offset w
nagłówkach programu ELF ( readelf -l).
Istnieją dodatkowe, pomocne pseudościeżki:
- [stack]
- Stos pierwotnego procesu (zwanego też głównym
wątkiem)
- [stack:<tid>] (od Linuksa 3.4)
- Stos wątku (gdzie <tid> jest identyfikatorem
wątku). Odpowiada ścieżce
/proc/[pid]/task/[tid]/.
- [vdso]
- Wirtualny, dynamicznie linkowany obiekt współdzielony.
- [heap]
- Stos wątku.
- Jeśli pole ścieżka jest puste, to jest to
anonimowe przypisanie, takie jak pozyskiwane za pomocą funkcji
mmap(2). Nie ma prostej metody na powiązanie jej ze
źródłem procesu oprócz metod takich jak
gdb(1), strace(1) itp.
W Linuksie 2.0 nie ma pola podającego nazwę
ścieżki.
- /proc/[pid]/mem
- Za pośrednictwem tego pliku można, korzystając z
open(2), read(2) i lseek(2), uzyskać
dostęp do stron pamięci procesu.
- /proc/[pid]/mountinfo (od wersji jądra 2.6.26)
- Plik zawiera informacje o punktach montowania. Składa się z
linii w postaci:
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
- Liczby w nawiasach są etykietami poniższych
opisów:
- (1)
- ID montowania: unikatowy identyfikator montowania (może
zostać użyty ponownie po wykonaniu umount(2)).
- (2)
- ID rodzica: identyfikator rodzica (lub siebie samego, jeśli
montowanie znajduje się na szczycie drzewa montowań).
- (3)
- główny:poboczny: wartość pola st_dev
(patrz stat(2)) dla plików w systemie plików.
- (4)
- korzeń: korzeń (root) montowania w systemie
plików.
- (5)
- punkt montowania: punkt montowania w odniesieniu do korzenia
procesów.
- (6)
- opcje montowania: opcje montowania dla każdego montowania.
- (7)
- pola opcjonalne: zero lub więcej pól w postaci
"znacznik[:wartość]"
- (8)
- separator: oznacza koniec pól opcjonalnych.
- (9)
- typ systemu plików: nazwa systemu plików w postaci
"typ[.podtyp]".
- (10)
- źródło montowania: informacja zależna od
systemu plików lub "none".
- (11)
- super opcje: opcje dla superbloku.
- Parsery powinny ignorować wszystkie nierozpoznane pola opcjonalne.
Obecnie są to:
- shared:X
- montowanie jest współdzielone w grupie
węzłów X
- master:X
- montowanie jest podrzędne w stosunku do grupy
węzłów X
- propagate_from:X
- montowanie jest podrzędne i podlega propagacji z grupy
węzłów X (*)
- unbindable
- montowanie jest niepodpinalne
- (*) X jest najbliższą dominującą grupą
węzłów pod korzeniem procesów. Jeśli X
jest bezpośrednio nadrzędne w stosunku do montowania, lub
jeśli nie istnieje dominująca grupa
węzłów pod tym samym korzeniem, to obecne jest
wyłącznie pole "master:X", bez pola
"propagate_from:X".
Aby dowiedzieć się więcej o propagacji montowań,
proszę zapoznać się z
Documentation/filesystems/sharedsubtree.txt w drzewie
źródeł jądra Linux.
- /proc/[pid]/mounts (od wersji Linuksa 2.4.19)
- Jest to lista wszystkich systemów plików obecnie
zamontowanych w przestrzeni montowań procesów. Format tego
pliku jest udokumentowany w fstab(5). Od wersji 2.6.15 jądra
Linuksa, ten plik może być użyty w wywołaniu
funkcji poll(): po otwarciu tego pliku do odczytu, zmiana w nim (np.
montowanie lub odmontowanie systemu plików) powoduje, że
select(2) oznaczy deskryptor jako możliwy do odczytu, a
poll(2) i epoll_wait(2) zaznaczą, że w pliku
wystąpił błąd.
- /proc/[pid]/mountstats (Od wersji Linuksa 2.6.17)
- Plik eksportuje informacje (statystyki, informacje konfiguracyjne) o
punktach montowań w przestrzeni nazwy procesów. Wiersze
pliku mają następującą postać:
device /dev/sda7 mounted on /home with fstype ext3 [statistics]
( 1 ) ( 2 ) (3 ) (4)
- Pola w każdym wierszu są następujące:
- (1)
- Nazwa zamontowanego urządzenia (lub "nodevice",
jeśli nie ma odpowiadającego urządzenia).
- (2)
- Punkt montowania w drzewie systemu plików.
- (3)
- Typ systemu plików.
- (4)
- Opcjonalne statystyki i informacje konfiguracyjne. Obecnie (Linux 2.6.26)
tylko system plików NFS eksportuje opcje za pomocą tego
pola.
- Plik jest odczytywalny wyłącznie dla
właściciela procesu.
- /proc/[pid]/ns/ (od Linuksa 3.0)
- Jest to podkatalog zawierający po jednym wpisie dla każdej
przestrzeni nazw, która obsługuje manipulację za
pomocą setns(2). Aby dowiedzieć się
więcej o przestrzeniach nazw, proszę zapoznać
się z clone(2).
- /proc/[pid]/ns/ipc (od Linuksa 3.0)
- Montowanie używając podpięcia wykonane na tym pliku
(patrz mount(2)) do jakiegoś innego miejsca w systemie
plików utrzymuje przestrzeń nazwy IPC procesu
określoną przez pid nawet, gdy zakończą
się wszystkie procesy znajdujące się obecnie w
przestrzeni nazwy.
Otwarcie tego pliku przywróci obsługę pliku
dotyczącą przestrzeni nazwy IPC procesu, określonego
przez pid. Tak długo jak jego deskryptor pliku pozostanie
otwarty, przestrzeń nazwy IPC pozostanie aktywna, nawet
jeśli wszystkie procesy w przestrzeni nazwy zakończą
się. Deskryptor pliku może być podany do
setns(2).
- /proc/[pid]/ns/net (od Linuksa 3.0)
- Montowanie używając podpięcia wykonane na tym pliku
(patrz mount(2)) do jakiegoś innego miejsca w systemie
plików utrzymuje sieciową przestrzeń nazwy procesu
określoną przez pid nawet, gdy zakończą
się wszystkie procesy znajdujące się w przestrzeni
nazwy.
Otwarcie tego pliku przywróci obsługę pliku
dotyczącą sieciowej przestrzeni nazwy procesu,
określonego przez pid. Tak długo jak jego deskryptor
pliku pozostanie otwarty, sieciowa przestrzeń nazwy pozostanie
aktywna, nawet jeśli wszystkie procesy w przestrzeni nazwy
zakończą się. Deskryptor pliku może być
podany do setns(2).
- /proc/[pid]/ns/uts (od Linuksa 3.0)
- Montowanie używając podpięcia wykonane na tym pliku
(patrz mount(2)) do jakiegoś innego miejsca w systemie
plików utrzymuje przestrzeń nazwy UTS procesu
określoną przez pid nawet, gdy zakończą
się wszystkie procesy znajdujące się obecnie w
przestrzeni nazwy.
Otwarcie tego pliku przywróci obsługę pliku
dotyczącą przestrzeni nazwy UTS procesu, określonego
przez pid. Tak długo jak jego deskryptor pliku pozostanie
otwarty, przestrzeń nazwy UTS pozostanie aktywna, nawet
jeśli wszystkie procesy w przestrzeni nazwy zakończą
się. Deskryptor pliku może być podany do
setns(2).
- /proc/[pid]/numa_maps (od Linuksa 2.6.14)
- Patrz numa(7).
- /proc/[pid]/oom_adj (od Linuksa 2.6.11)
- Plik może być użyty do dostosowania wyniku,
używanego do wybrania procesów do zabicia, w przypadku
sytuacji braku pamięci (out-of-memory - OOM). Jądro
używa tej wartości do operacji przesunięcia bitowego
wartości oom_score procesu: poprawne wartości
mieszczą się w zakresie od -16 do +15, wraz ze
specjalną wartością -17, która
całkowicie wyłącza zabijanie przy OOM danego procesu.
Dodatni wynik zwiększa prawdopodobieństwo, że proces
zostanie zabity przez OOM-killer, ujemny zmniejsza je.
- Domyślną wartością tego pliku jest 0, nowy
proces dziedziczy ustawienie oom_adj swojego rodzica. Proces musi
być uprzywilejowany ( CAP_SYS_RESOURCE) aby móc
zaktualizować ten plik.
- Od Linuksa 2.6.36 używanie tego pliku jest przestarzałe,
powinno się korzystać z
/proc/[pid]/oom_score_adj.
- /proc/[pid]/oom_score (od Linuksa 2.6.11)
- Plik wyświetla bieżący wynik, jaki jądro
przydziela temu procesowi w celu wybrania procesu do zabicia przez
OOM-killer. Wyższy wynik oznacza, że proces ma
większe prawdopodobieństwo zostania wybranym przez
OOM-killer. Podstawą wyniku jest liczba pamięci
użytej przez proces, a jest on zwiększany (+) lub
zmniejszany (-) przez następujące czynniki:
- *
- czy proces tworzy wiele potomków przy użyciu fork(2)
(+),
- *
- czy proces jest używany przez długi czas lub używa
dużo czasu procesora (-),
- *
- czy proces ma niską wartość nice (np. > 0)
(+),
- *
- czy proces jest uprzywilejowany (-) oraz
- *
- czy proces wykonuje bezpośredni dostęp do sprzętu
(-).
- Wartość oom_score uwzględnia
również przesunięcie określone przez
ustawienie procesu oom_score_adj lub oom_adj.
- /proc/[pid]/oom_score_adj (od Linuksa 2.6.36)
- Plik może być użyty do dostosowania heurystyki zwanej
"badness", używanej do wybrania procesu który
zostanie zabity w sytuacji braku pamięci.
Przypisuje ona do każdego potencjalnego zadania wartość
od 0 (nigdy nie zabija) do 1000 (zawsze zabija) aby określić
docelowy proces do zabicia. Jednostki są z grubsza proporcjonalne
do pamięci, którą proces może
przydzielić, obliczaną w oparciu do bieżącego
użycia pamięci i pamięci wymiany. Na przykład
zadanie używające całą dozwoloną
pamięć otrzyma wynik 1000, a jeśli użyje
połowę dozwolonej pamięci, otrzyma wynik 500.
Dodatkowym czynnikiem w wyniku "badness" jest fakt, że
procesy roota mają dodatkowe 3% pamięci w stosunku do
pozostałych procesów.
Wielkość "dozwolonej" pamięci zależy
od kontekstu w jakim wywołano OOM-killera. Jeśli wynika to z
faktu, że pamięć przeznaczona dla zadania
alokującego cpuset została wyczerpany, to dozwolona
pamięć odpowiada zestawowi pamięci przypisanego do
tego cpuset (zobacz cpuset(7)). Jeśli jest to skutek zasad
dot. pamięci węzła (lub węzłów),
to dozwolona pamięć odpowiada zestawowi tych zasad.
Jeśli wynika to z faktu, że osiągnięto limit
pamięci (lub pamięci wymiany) to dozwolona
pamięć jest tak ustawionym limitem. Gdy wynika to z sytuacji
braku pamięci, to dozwolona pamięć odpowiada
wszystkich zaalokowanych zasobom.
Wartość oom_score_adj jest dodawana do wyniku
"badness" przed użyciem jej do wybrania procesu
przeznaczonego do zabicia. Dozwolone wartości wynoszą od
-1000 (OOM_SCORE_ADJ_MIN) do +1000 (OOM_SCORE_ADJ_MAX). Pozwala to
przestrzeni użytkownika na kontrolę preferencji OOM-killing.
Można w ten sposób zawsze preferować dane zadanie lub
całkowicie wyłączyć je z procesu OOM-killing.
Najniższa dostępna wartość (-1000) jest
równoznaczna z całkowitym wyłączeniem
OOM-killing dla danego zadania, ponieważ zawsze zwróci ono
wynik "badness" równy 0.
Z tego względu łatwo jest zdefiniować
wielkość pamięci dla każdego zadania przez
przestrzeń użytkownika. Ustawienie wartości
oom_score_adj np. na +500 jest w przybliżeniu odpowiednikiem
pozwolenia pozostałym zadaniom w tym samym systemie, cpuset,
zasadom dot. pamięci i zasobom kontrolera pamięci na
użycie co najmniej 50% pamięci więcej. Z kolei
wartość -500 odpowiada mniej więcej zmniejszeniu o
50% dozwolonej pamięci.
Z powodu zgodności wstecznej ze starszymi jądrami do
modyfikacji wyniku "badness" wciąż można
używać /proc/[pid]/oom_adj. Jego
wartość skaluje się liniowo z oom_score_adj.
Zapis do /proc/[pid]/oom_score_adj lub /proc/[pid]/oom_adj
zmieni zapis w drugim pseudopliku na przeskalowaną odpowiednio
wartość.
- /proc/[pid]/pagemap (od Linuksa 2.6.25)
- Plik pokazuje przypisanie każdej z wirtualnych stron procesu do
ramki fizycznej strony lub przestrzeni wymiany. Zawiera jedną
wartość 64-bitową na każdą
stronę wirtualną, bity oznaczają:
- 63
- Jeśli jest ustawione, strona jest obecna w pamięci RAM.
- 62
- Jeśli jest ustawione, strona jest obecne w pamięci wymiany
(swap)
- 61 (od Linuksa 3.5)
- Strona jest stroną przypisaną do pliku lub
dzieloną stroną anonimową.
- 60-56 (od Linuksa 3.11)
- Zero
- 55 (od Linuksa 3.11)
- PTE jest soft-dirty (więcej informacji w pliku w
źródłach jądra:
Documentation/vm/soft-dirty.txt).
- 54-0
- Jeśli strona jest obecna w pamięci RAM (bit 63), to te bity
udostępniają numer ramki strony, który można
użyć z indeksem /proc/kpageflags i
/proc/kpagecount. Jeśli strona jest obecna w pamięci
wymiany (bit 62), to bity 4-0 informują o typie pamięci
wymiany, a bity 54-5 kodują przesunięcie pamięci
wymiany.
- Przed Linuksem 3.11 bity 60-55 kodowały logarytm dwójkowy
informujący o rozmiarze strony.
- Aby efektywnie wykorzystać /proc/[pid]/pagemap należy
użyć /proc/[pid]/maps do określenia
które obszary pamięci zostały rzeczywiście
przypisane i móc przejść między
nieprzypisanymi obszarami.
- Plik /proc/[pid]pagemap istnieje tylko jeśli podczas
kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/[pid]/personality (od Linuksa 2.6.28)
- Plik tylko do odczytu pokazuje domenę uruchamiania procesu
ustawioną przez personality(2). Wartość
wyświetlana jest w zapisie szesnastkowym.
- /proc/[pid]/root
- UNIX i Linux wspierają pomysł określonego dla
każdego procesu osobno katalogu głównego systemu
plików, ustawianego przez wywołanie systemowe
chroot(2). Plik ten wskazuje na katalog główny
systemu plików i zachowuje się w ten sam sposób jak
exe, fd/*, itp.
W procesie wielowątkowym zawartość tego linku
symbolicznego nie jest dostępna, jeżeli wątek
główny już się zakończył
(zazwyczaj przez wywołanie pthread_exit(3)).
- /proc/[pid]/smaps (od Linuksa 2.6.14)
- Plik ten pokazuje zużycie pamięci dla każdego
mapowania procesu. Dla każdego takiego mapowania pokazana jest
lista następujących linii:
00400000-0048a000 r-xp 00000000 fd:03 960637 /bin/bash
Size: 552 kB
Rss: 460 kB
Pss: 100 kB
Shared_Clean: 452 kB
Shared_Dirty: 0 kB
Private_Clean: 8 kB
Private_Dirty: 0 kB
Referenced: 460 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
Pierwsza z tych linii pokazuje te same informacje o mapowaniach, co w
/proc/[pid]/maps. Pozostałe linie zawierają rozmiar
mapowania, ilość mapowań obecnych w RAM
("Rss"), proporcjonalny udział w tym mapowaniu
("Pss"), liczbę czystych i brudnych stron
współdzielonych w mapowaniu oraz liczbę czystych i
brudnych prywatnych stron w mapowaniu. "Referenced" oznacza
pamięć która jest oznaczona jako pamięć
do której ktoś odnosi się lub uzyskuje dostęp.
"Anonymous" pokazuje pamięć
nienależącą do żadnego pliku.
"Swap" pokazuje jak dużo pamięci która
byłaby anonimowa jest również używana,
lecz w pamięci wymiany.
Wpis "KernelPageSize" jest rozmiarem strony używanym przez
jądro do VMA. Jest on w większości przypadków
takim sam, jak rozmiar używany przez MMU. Wyjątek
występuje na jądrach PPC64, gdy jądro
korzystając z podstawowego rozmiaru strony w wielkości 64K
może wciąż używać 4K stron dla MMU na
starszych procesorach. Aby to rozróżnić, ta
łatka raportuje "MMUPageSize" jako rozmiar strony
używany przez MMU.
"Locked" wskazuje, czy mapowanie jest zablokowane w pamięci
czy nie.
Pole "VmFlags" reprezentuje flagi jądra związane z
danych obszarem pamięci wirtualnej (VMA) zakodowanym w dwuliterowym
symbolu. Oto kody:
rd - odczytywalna (readable)
wr - zapisywalna (writable)
ex - wykonywalna (executable)
sh - dzielona (shared)
mr - może odczytać (may read)
mw - może zapisać (may write)
me - może wykonać (may execute)
ms - może dzielić (may share)
gd - segment stosu rośnie w dół (grows down)
pf - czysty przedział PFG (pure PFN)
dw - wyłączony zapis do zmapowanego pliku (disabled write)
lo - strony zablokowane w pamięci (locked)
io - pamięć zmapowana przestrzeni we/wy (I/O)
sr - udostępniono wskazówkę sekwencyjnego odczytu
(sequential read)
rr - udostępniono wskazówkę losowego odczytu (random
read)
dc - nie kopiuj przestrzeni przy forkowaniu (do not copy)
de - nie rozszerzaj przestrzeni przy przemapowaniu
(do not expand)
ac - przestrzeń jest policzalna (area is accountable)
nr - przestrzeń wymiany niezarezerwowana dla tej
przestrzeni (not reserved)
ht - przestrzeń używa dużych stron tlb (huge tlb)
nl - mapowanie nieliniowe (non-linear)
ar - flaga charakterystyczna dla architektury
dd - nie włączaj przestrzeni do zrzutu jądra (do not
dump)
sd - flaga soft-dirty
mm - przestrzeń mieszanego mapowania
hg - flaga wskazówki dużych stron (huge)
nh - flaga wskazówki stron niebędących dużymi
(no-huge)
mg - flaga wskazówki łączenia (mergeable)
Plik /proc/[pid]/smaps istnieje tylko jeśli podczas kompilacji
jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/[pid]/stack (od Linuksa 2.6.29)
- Plik zapewnia symboliczny ślad wywołania funkcji w tym
stosie jądra dla procesu. Plik istnieje, jeśli jądro
zostało zbudowane z włączoną opcją
konfiguracji CONFIG_STACKTRACE.
- /proc/[pid]/stat
- Informacje o stanie procesu. Korzysta z tego ps(1). Są one
zdefiniowane w pliku źródeł jądra
fs/proc/array.c.
Kolejne pola i ich właściwe specyfikatory formatu
scanf(3) to:
- (1) pid %d
-
Identyfikator procesu (PID).
- (2) comm %s
- Nazwa pliku wykonywalnego w nawiasach. Widać, czy plik uległ
wymianie.
- (3) state %c
- Jeden z poniższych znaków, wskazujących na status
procesu:
- R
- Działający (Running)
- S
- Śpiący (Sleeping) w przerywalnym oczekiwaniu
- D
- Śpiący w nieprzerywalnym oczekiwaniu dyskowym
- Z
- Zombie
- T
- Zatrzymany sygnałem lub (przed Linuksem 2.6.33) zatrzymany
ślad ( trace stopped)
- t
- Zatrzymany śledzeniem (tracing stop) - Linux 2.6.33 i
nowszy
- W
- Stronicowanie (tylko przed Linuksem 2.6.0)
- X
- Martwy (od Linuksa 2.6.0)
- x
- Martwy (między Linuksem 2.6.33 a 3.13)
- K
- Wakekill - oczekiwanie; wybudzenie przy śmiertelnym sygnale
(między Linuksem 2.6.33 a 3.13)
- W
- Budzący się (między Linuksem 2.6.33 a 3.13)
- P
- Zaparkowany (między Linuksem 3.9 a 3.13)
- (4) ppid %d
- PID procesu macierzystego tego procesu.
- (5) pgrp %d
- Identyfikator grupy procesów danego procesu.
- (6) session %d
- Identyfikator sesji procesu.
- (7) tty_nr %d
- Kontroluje terminal procesu (poboczny numer urządzenia jest
przechowywany w kombinacji bitów 31 do 20 i 7 do 0, natomiast
główny numer urządzenia jest w bitach 15 do 8).
- (8) tpgid %d
- Identyfikator grupy procesów pierwszoplanowych
kontrolującego terminala procesu.
- (9) flags %u
- Słowo flag jądra dla danego procesu. Znaczenie
poszczególnych bitów określają definicje PF_*
w pliku źródeł jądra Linux
include/linux/sched.h. Szczegóły zależą
od wersji jądra.
Format tego pola przed Linuksem 2.6 miał postać %lu.
- (1) minflt %lu
- Liczba drobnych błędów, które
popełnił proces, a które nie wymagały
załadowania strony pamięci z dysku.
- (11) cminflt %lu
- Liczba drobnych błędów procesów
potomnych.
- (12) majflt %lu
- Liczba głównych błędów, które
popełnił proces, a które wymagały
załadowania strony pamięci z dysku.
- (13) cmajflt %lu
- Liczba głównych błędów procesów
potomnych.
- (14) utime %lu
- Czas jaki został przydzielony procesowi w trybie
użytkownika, mierzony w taktach zegara (podzielonych przez
sysconf(_SC_CLK_TCK)). Obejmuje to czas gościa,
guest_time (czas spędzony w czasie działania
wirtualnego CPU, patrz niżej), tak więc aplikacje,
które nie wiedzą o polu czasu gościa nie tracą
tego czasu ze swych obliczeń.
- (15) stime %lu
- Czas, jaki został przydzielony procesowi w trybie jądra,
mierzony w taktach zegara (podzielonych przez
sysconf(_SC_CLK_TCK)).
- (16) cutime %ld
- Czas, jaki został przydzielony procesom potomnym tego procesu w
stanie waited-for w trybie użytkownika, mierzony w taktach zegara
(podzielonych przez sysconf(_SC_CLK_TCK)), patrz także
times(2)). Obejmuje to czas gościa, cguest_time (czas
spędzony działając na procesorze wirtualnym, patrz
niżej).
- (17) cstime %ld
- Czas, jaki został przydzielony procesom potomnym tego procesu w
stanie waited-for w trybie jądra, mierzony w taktach zegara
(podzielonych przez sysconf(_SC_CLK_TCK).
- (18) priority %ld
- (Wyjaśnienie dla Linuksa 2.6) W przypadku procesów
działających z zasadami planisty czasu rzeczywistego (
policy poniżej; patrz sched_setscheduler(2)), jest to
liczba przeciwna w stosunku do priorytetu planisty minus jeden, tzn. jest
to zakres -2 do -100 odpowiadający priorytetom czasu rzeczywistego
od 1 do 99. W przypadku procesów nie działających
według tych zasad, jest to surowa wartość nice (
setpriority(2) zgodna z podaną przez jądro.
Jądro przechowuje wartości nice jako liczby w zakresie od 0
(wysoki) do 39 (niski), co odpowiada widocznemu dla użytkownika
zakresowi nice od -20 do 19.
Przed Linuksem 2.6 była to wartość skalowana w oparciu
o wagę jaką planista przypisał do danego
procesu.
- (19) nice %ld
- Wartość "nice" (patrz setpriority(2))
zawierająca się w zakresie od 19 (niski priorytet) do -20
(wysoki priorytet).
- (20) num_threads %ld
- Liczba wątków procesu (od Linuksa 2.6). Przed jądrem
2.6 to pole miało przydzieloną na sztywno
wartość 0, jako wypełniacz do usuniętego
wcześniej pola.
- (21) itrealvalue %ld
- Czas w jiffies poprzedzający wysłanie przez czasomierz do
procesu następnego sygnału SIGALRM. Od jądra
2.6.17, to pole nie jest dłużej utrzymywane i ma
ustawioną na sztywno wartość 0.
- (22) starttime %llu
- Czas w jakim proces uruchomił się po rozruchu systemu.
Jądra Linux przed wersją 2.6 wyrażają
tę wartość w tzw. "jiffies". Od Linuksa 2.6
wartość jest wyrażana w taktach zegara (podzielonych
przez sysconf(_SC_CLK_TCK)).
Format tego pola przed Linuksem 2.6 miał postać %lu.
- (23) vsize %lu
- Rozmiar pamięci wirtualnej w bajtach.
- (24) rss %ld
- Resident Set Size: liczba stron, które proces ma w rzeczywistej
pamięci. Są to po prostu strony, które
obejmują segment text, segment data i przestrzeń stosu. Nie
obejmuje to stron, które nie były ładowane na
żądanie lub które uległy wymianie.
- (25) rsslim %lu
- Aktualne miękkie ograniczenie rss procesu w bajtach; patrz opis
RLIMIT_RSS w getrlimit(2).
- (26) startcode %lu
- Adres, pod którym zaczyna się kod programu.
- (27) endcode %lu
- Adres, pod którym kończy się kod programu.
- (28) startstack %lu
- Adres początku (tzn. spód) stosu.
- (29) kstkesp %lu
- Bieżąca wartość ESP (wskaźnika stosu),
określona na podstawie strony stosu jądra dla danego
procesu.
- (30) kstkeip %lu
- Aktualny EIP (wskaźnik instrukcji).
- (31) signal %lu
- Maska bitowa oczekujących sygnałów,
wyświetlana jako liczba dziesiętna. Przestarzałe,
ponieważ nie dostarcza informacji o sygnałach czasu
rzeczywistego; prosimy używać /proc/[pid]/status
zamiast tego pliku.
- (32) blocked %lu
- Maska bitowa zablokowanych sygnałów, wyświetlana jako
liczba dziesiętna. Przestarzałe, ponieważ nie
dostarcza informacji o sygnałach czasu rzeczywistego; prosimy
używać /proc/[pid]/status zamiast tego pliku.
- (33) sigignore %lu
- Maska bitowa ignorowanych sygnałów, wyświetlana jako
liczba dziesiętna. Przestarzałe, ponieważ nie
dostarcza informacji o sygnałach czasu rzeczywistego; prosimy
używać /proc/[pid]/status zamiast tego pliku.
- (34) sigcatch %lu
- Maska bitowa schwytanych sygnałów, wyświetlana jako
liczba dziesiętna. Przestarzałe, ponieważ nie
dostarcza informacji o sygnałach czasu rzeczywistego; prosimy
używać /proc/[pid]/status zamiast tego pliku.
- (35) wchan %lu
- Jest to "kanał" na którym oczekuje proces. Jest to
adres położenia w jądrze, gdzie proces jest w
uśpieniu. Powiązaną nazwę symboliczną
można znaleźć w /proc/[pid]/wchan.
- (36) nswap %lu
- Liczba stron, które uległy wymianie (nieutrzymywane).
- (37) cnswap %lu
- Łączna wartość nswap dla
procesów potomnych (nieutrzymywane).
- (38) exit_signal %d (od Linuksa 2.1.22)
- Sygnał wysyłany przez ginący proces do jego procesu
macierzystego.
- (39) processor %d (od Linuksa 2.2.8)
- Numer CPU, na którym proces ostatnio działał.
- (40) rt_priority %u (od Linuksa 2.5.19)
- Priorytet planisty czasu rzeczywistego, liczba w zakresie od 1 do 99 do
procesów przydzielanych według zasad czasu rzeczywistego lub
0 do procesów nie czasu rzeczywistego (patrz
sched_setscheduler(2)).
- (41) policy %u (od Linuksa 2.5.19)
- Polityka przydzielania zadaniom czasu procesora (patrz
sched_setscheduler(2)). Dekodowana używając
stałych SCHED_* w linux/sched.h.
Format tego pola przed Linuksem 2.6.22 miał postać %lu.
- (42) delayacct_blkio_ticks %llu (od Linuksa
2.6.18)
- Sumaryczna zwłoka bloków wejścia/wyjścia,
mierzona w taktach zegara (centysekundy).
- (43) guest_time %lu (od Linuksa 2.6.24)
- Czas gościa procesu (czas, jaki upłynął
podczas działania na wirtualnym procesorze systemu operacyjnego
gościa), mierzony w taktach zegara (podzielony przez
sysconf(_SC_CLK_TCK)
- (44) cguest_time %ld (od Linuksa 2.6.24)
- Czas gościa potomków procesu, mierzony w taktach zegara
(podzielony przez sysconf(_SC_CLK_TCK)).
- (45) start_data %lu (od Linuksa 3.3)
- Adres powyższej którego umieszczane są zainicjowane i
niezainicjowane (BSS) dane programu.
- (46) end_data %lu (od Linuksa 3.3)
- Adres poniżej którego umieszczane są zainicjowane i
niezainicjowane (BSS) dane programu.
- (47) start_brk %lu (od Linuksa 3.3)
- Adres, powyżej którego można
rozciągnąć kopiec (ang. heap) za
pomocą brk(2).
- (48) arg_start %lu (od Linuksa 3.5)
- Adres powyżej którego umieszczane są argumenty
wiersza polecenia programu ( argv).
- (49) arg_end %lu (od Linuksa 3.5)
- Adres poniżej którego umieszczane są argumenty
wiersza polecenia programu ( argv).
- (50) env_start %lu (od Linuksa 3.5)
- Adres powyżej którego umieszczane jest środowisko
programu.
- (51) env_end %lu (od Linuksa 3.5)
- Adres poniżej którego umieszczane jest środowisko
programu.
- (52) exit_code %d (od Linuksa 3.5)
- Kod zakończenia wątku w postaci przekazywanej przez
waitpid(2).
- /proc/[pid]/statm
- Udostępnia informacje o użyciu pamięci, mierzone w
stronach. Występują następujące kolumny:
size (1) łączny rozmiar programu
(taki sam jak VmSize w /proc/[pid]/status)
resident (2) rozmiar części rezydentnej
(taki sam jak VmRSS w /proc/[pid]/status)
share (3) strony wspólne (tzn. obecne w pliku)
text (4) tekst (kod)
lib (5) biblioteki (nieużywane w Linuksie 2.6)
data (6) dane i stos
dt (7) strony nieaktualne (dirty; nieużywane w Linuksie 2.6)
- /proc/[pid]/status
- Udostępnia sporo informacji ze /proc/[pid]/stat i
/proc/[pid]/statm w postaci łatwiejszej do przeanalizowania
przez człowieka. Oto przykład:
$ cat /proc/$$/status
Name: bash
State: S (sleeping)
Tgid: 3515
Pid: 3515
PPid: 3452
TracerPid: 0
Uid: 1000 1000 1000 1000
Gid: 100 100 100 100
FDSize: 256
Groups: 16 33 100
VmPeak: 9136 kB
VmSize: 7896 kB
VmLck: 0 kB
VmHWM: 7572 kB
VmRSS: 6316 kB
VmData: 5224 kB
VmStk: 88 kB
VmExe: 572 kB
VmLib: 1708 kB
VmPTE: 20 kB
Threads: 1
SigQ: 0/3067
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed: 00000001
Cpus_allowed_list: 0
Mems_allowed: 1
Mems_allowed_list: 0
voluntary_ctxt_switches: 150
nonvoluntary_ctxt_switches: 545
- Występują następujące pola:
- *
- Name: Polecenie uruchomione przez ten proces.
- *
- State: Bieżący stan procesu. Jeden z: "R
(running)", "S (sleeping)", "D (disk sleep)",
"T (stopped)", "T (tracing stop)", "Z
(zombie)", or "X (dead)".
- *
- Tgid: identyfikator grupy wątku (np. identyfikator
procesu).
- *
- Pid: identyfikator wątku (patrz gettid(2)).
- *
- PPid: PID procesu macierzystego.
- *
- TracerPid: PID procesu śledzącego ten proces (0 gdy
nie jest śledzony).
- *
- Uid, Gid: UID (GID): realny, efektywny, zapisany oraz
systemu plików.
- *
- FDSize: Liczba slotów aktualnie przydzielonych
deskryptorów plików.
- *
- Groups: Uzupełniająca lista grup.
- *
- VmPeak: Szczytowy rozmiar pamięci wirtualnej.
- *
- VmSize: Rozmiar pamięci wirtualnej.
- *
- VmLck: Rozmiar pamięci zablokowanej (patrz
mlock(3)).
- *
- VmHWM: Szczytowy ustawiony rozmiar rezydentny ("high water
mark").
- *
- VmRSS: Ustawiony rozmiar rezydentny.
- *
- VmData, VmStk, VmExe: Rozmiar segmentów
danych, stosu i tekstu.
- *
- VmLib: Rozmiar kodu biblioteki współdzielonej.
- *
- VmPTE: Rozmiar wpisów tablicy strony (od Linuksa
2.6.10).
- *
- Threads: Liczba wątków w procesie
zawierających ten wątek.
- *
- SigQ: Pole zawiera dwie liczby oddzielone ukośnikiem,
które odnoszą się do skolejkowanych
sygnałów do realnego identyfikatora użytkownika tego
procesu. Pierwsza jest liczbą aktualnie skolejkowanych
sygnałów do tego realnego identyfikatora użytkownika,
a druga jest limitem zasobów liczby skolejkowanych
sygnałów do tego procesu (patrz opis
RLIMIT_SIGPENDING w getrlimit(2)).
- *
- SigPnd, ShdPnd: Liczba sygnałów
oczekujących na wątek i na proces jako
całość (patrz pthreads(7) i
signal(7)).
- *
- SigBlk, SigIgn, SigCgt: Maski oznaczające
zablokowane, zignorowane i przechwycone sygnały (patrz
signal(7)).
- *
- CapInh, CapPrm, CapEff: Maski
możliwości, włączonych w zestawach
dziedziczonych (inheritable), dozwolonych (permitted) i efektywnych
(effective) (patrz capabilities(7)).
- *
- CapBnd: Zestaw możliwości ograniczających
(capability bounding set) (od jądra 2.6.26, patrz
capabilities(7)).
- *
- Cpus_allowed: Maska procesorów, na których proces
może być uruchomiony (od Linuksa 2.6.24, patrz
cpuset(7)).
- *
- Cpus_allowed_list: Jak wyżej, ale w "formacie
listy" (od Linuksa 2.6.26, patrz cpuset(7)).
- *
- Mems_allowed: Maska węzłów pamięci,
dozwolonych dla tego procesu (od Linuksa 2.6.24, patrz
cpuset(7)).
- *
- Mems_allowed_list: Jak wyżej, ale w "formacie
listy" (od Linuksa 2.6.26, patrz cpuset(7)).
- *
- voluntary_ctxt_switches, nonvoluntary_ctxt_switches: Liczba
dobrowolnych i przymusowych przełączeń kontekstu (od
Linuksa 2.6.23).
- /proc/[pid]/syscall (od Linuksa 2.6.27)
- Plik udostępnia numer wywołania systemowego i rejestr
argumentu dla aktualnie wykonywanego przez proces wywołania
systemowego, po którym następują wartości
wskaźnika stosu i rejestry liczników programu.
Udostępnianych jest wszystkie sześć rejestrów
argumentu, choć większość
wywołań systemowych używa mniejszej liczby
rejestrów.
Jeśli proces jest zablokowany, lecz nie w wywołaniu
systemowym, to plik zawiera wartość -1 w miejscu numeru
wywołania systemowego, po którym następują
wartości wskaźnika stosu i licznika programu. Jeśli
proces nie jest zablokowany, to plik zawiera łańcuch
"running".
Obecne tylko, jeśli jądro zostało skonfigurowane z
CONFIG_HAVE_ARCH_TRACEHOOK.
- /proc/[pid]/task (od Linuksa 2.6.0-test6)
- Jest to katalog zawierający po jednym podkatalogu dla
każdego wątku procesu. Nazwą każdego
podkatalogu jest numeryczne ID ( [tid]) wątku (patrz
gettid(2)). Każdy z podkatalogów zawiera zbiór
plików o tej samej nazwie i zawartości, co katalogi
/proc/[pid]. Dla atrybutów, które są
współdzielone przez wszystkie wątki
zawartość każdego z plików w podkatalogach
task/[tid] będzie taka sama jak zawartość
odpowiednich plików w nadrzędnym katalogu /proc/[pid]
(np. w procesie wielowątkowym wszystkie pliki task/[tid]/cwd
będą miały taką samą
zawartość, jak plik /proc/[pid]/cwd w katalogu
nadrzędnym, ponieważ wszystkie wątki procesu
dzielą katalog bieżący). Dla atrybutów,
które dla każdego wątku są
różne, odpowiednie pliki w task/[tid] mogą
mieć różne wartości (np. różne
pola w każdym z plików task/[tid]/status mogą
być inne dla każdego wątku).
W procesie wielowątkowym zawartość katalogu
/proc/[pid]/task nie jest dostępna, jeżeli
wątek główny już się
zakończył (najprawdopodobniej wywołując
pthread_exit(3)).
- /proc/[pid]/wchan (od Linuksa 2.6.0)
- Nazwa symboliczna odnosząca się do położenia,
gdzie proces jest w uśpieniu.
- /proc/apm
- Wersja APM (Zaawansowane zarządzanie energią) oraz
informacja o akumulatorach, gdy CONFIG_APM było zdefiniowane
podczas kompilacji jądra.
- /proc/bus
- Zawiera podkatalogi odpowiadające zainstalowanym magistralom.
- /proc/bus/pccard
- Podkatalog dla urządzeń PCMCIA, gdy CONFIG_PCMCIA
było zdefiniowane podczas kompilacji jądra.
- /proc/[pid]/timers (od Linuksa 3.10)
- Lista liczników czasu POSIX dla procesu. Każdy licznik jest
wypisany w wierszu, który rozpoczyna się
łańcuchem "ID:". Na przykład:
ID: 1
signal: 60/00007fff86e452a8
notify: signal/pid.2634
ClockID: 0
ID: 0
signal: 60/00007fff86e452a8
notify: signal/pid.2634
ClockID: 1
Wiersze dla każdego licznika mają następujące
znaczenie:
- ID
- Identyfikator danego licznika czasu. Nie jest to ten sam identyfikator, co
ten zwracany przez timer_create(2), lecz jest to
wewnątrzjądrowy identyfikator dostępny
również za pomocą pola si_timerid struktury
siginfo_t (zob. sigaction(2)).
- signal
- Numer sygnału używany przez dany licznik do dostarczania
powiadomień, po którym następuje ukośnik a
następnie wartość sigev_value.sival_ptr
dostarczana do obsługiwacza sygnału. Poprawne jedynie dla
liczników powiadamiających za pomocą
sygnału.
- notify
- Część przed ukośnikiem określa
mechanizm używany przez dany licznik czasu do dostarczania
powiadomień, który jest jedną z wartości
"thread" (wątek), "signal" (sygnał) lub
"none" (brak). Zaraz po ukośniku znajduje się
łańcuch "tid" dla liczników z
powiadomieniami SIGEV_THREAD_ID lub "pid" dla
liczników z innymi mechanizmami powiadamiania. Po "."
znajduje się PID procesu któremu będzie dostarczany
sygnał, jeśli licznik czasu powiadamia za pomocą
sygnału.
- ClockID
- Pole identyfikuje zegar, którego dany licznik czasu używa do
pomiaru czasu. W większości zegarów jest to liczba
która pasuje do jednej ze stałych CLOCK_* w
przestrzeni użytkownika udostępnianych za pomocą
<time.h>. Liczniki CLOCK_PROCESS_CPUTIME_ID
wyświetlają tu wartość -6, natomiast
CLOCK_THREAD_CPUTIME_ID wyświetlają
wartość -2.
- /proc/bus/pccard/drivers
- /proc/bus/pci
- Zawiera różne podkatalogi magistral oraz pseudopliki
zawierające informacje o magistralach PCI, zainstalowanych
urządzeniach oraz sterownikach urządzeń.
Niektóre z tych plików nie są w postaci ASCII.
- /proc/bus/pci/devices
- Informacje o urządzeniach PCI. Dostęp do nich może
się odbywać poprzez lspci(8) i setpci(8).
- /proc/cmdline
- Argumenty przekazane jądru Linux podczas startu systemu. Zazwyczaj
odbywa się to poprzez zarządcę startu systemu,
takiego jak lilo(8) lub grub(8).
- /proc/config.gz (od Linuksa 2.6)
- Plik pokazuje opcje konfiguracyjne, które były użyte
do zbudowania aktualnie działającego jądra, w tym
samym formacie, jaki jest używany przez plik .config,
który jest wynikiem konfiguracji jądra
(używając make xconfig, make config i
podobnych poleceń). Zawartość pliku jest
skompresowana; można ją odczytać lub wyszukać
za pomocą zcat(1) i zgrep(1). Tak długo jak
nie zostały dokonane zmiany w poniższym pliku,
zawartość /proc/config.gz jest taka sama jak ta
udostępniona przez:
cat /lib/modules/$(uname -r)/build/.config
- /proc/config.gz jest udostępniany wyłącznie
wtedy, gdy jądro jest skonfigurowane z
CONFIG_IKCONFIG_PROC.
- /proc/cpuinfo
- Jest to zbiór elementów zależnych od CPU i
architektury systemu; dla każdej wspieranej architektury jest inna
lista. Dwa popularne wpisy to: processor, który
udostępnia numer CPU oraz bogomips; jest to stała
systemowa, wyliczona podczas inicjalizacji jądra. Maszyny SMP
zawierają informacje o każdym z procesorów. Polecenie
lscpu(1) zbiera ich informacje z tego pliku.
- /proc/devices
- Listing tekstowy numerów głównych oraz grup
urządzeń. Może to służyć
skryptom MAKEDEV do zachowania spójności z
jądrem.
- /proc/diskstats (od wersji Linuksa 2.5.69)
- Plik zawiera statystyki operacji wejścia/wyjścia dla
każdego urządzenia dyskowego. Dalsze informacje można
znaleźć w pliku Documentation/iostats.txt w
źródłach jądra Linux.
- /proc/dma
- Jest listą zarejestrowanych i używanych
kanałów DMA (direct memory access) szyny ISA.
- /proc/driver
- Pusty podkatalog.
- /proc/execdomains
- Lista domen uruchamiania (wcieleń ABI [Application Binary Interface
- przyp. tłum.]).
- /proc/fb
- Informacje o buforze ramki, o ile podczas kompilacji jądra
zdefiniowano CONFIG_FB.
- /proc/filesystems
- Tekstowa lista systemów plików obsługiwanych przez
jądro, a konkretnie systemów plików, które
zostały wkompilowane w jądro lub których
moduły jądra są obecnie załadowane (patrz
również filesystems(5)). Jeśli system
plików jest oznaczony jako "nodev" oznacza to, że
nie wymaga on zamontowania urządzenia blokowego (np. jest to
wirtualny lub sieciowy system plików).
Plik ten może być niekiedy użyty przez mount(8),
gdy nie podano systemów plików i nie potrafi on
określić typu systemu plików. Próbowane
są wówczas systemy plików wypisane w tym pliku (poza
systemami z oznaczeniem "nodev").
- /proc/fs
- Zawiera podkatalogi, które w kolejności zawierają
pliki z informacjami o (pewnych) zamontowanych systemach
plików.
- /proc/ide
- Katalog ten istnieje w systemach zawierających magistralę
IDE. Zawiera po jednym katalogu dla każdego kanału IDE oraz
dla przyłączonych urządzeń.
Wśród plików są:
cache rozmiar bufora w KB
capacity liczba sektorów
driver wersja sterownika
geometry geometria fizyczna i logiczna
identify szesnastkowo
media rodzaj nośnika
model numer modelu producenta
settings ustawienia napędu
smart_thresholds szesnastkowo
smart_values szesnastkowo
Dostęp do tych informacji w przyjaznym formacie umożliwia
program narzędziowy hdparm(8).
- /proc/interrupts
- Plik jest używany do zapisania liczby przerwań na procesor
na urządzenie wejścia/wyjścia. Od Linuksa 2.6.24,
przynajmniej do architektur i386 i x86_64 zawiera on również
przerwania wewnętrznosystemowe (to znaczy nie związane z
urządzeniem jako takim), takie jak NMI (nonmaskable interrupt), LOC
(local timer interrupt) i do systemów SMP: TLB (TLB flush
interrupt), RES (rescheduling interrupt), CAL (remote function call
interrupt), mogą również występować
inne. Formatowanie jest bardzo czytelne do odczytu, wykonane w ASCII.
- /proc/iomem
- Odwzorowanie portów we/wy w pamięci w Linuksie 2.4.
- /proc/ioports
- Jest to lista obecnie zarejestrowanych i używanych obszarów
portów we/wy.
- /proc/kallsyms (od wersji Linuksa 2.5.71)
- Zawiera wyeksportowane przez jądro definicje symboli, które
są używane przez narzędzia modules(X) do
dynamicznego podłączania ładowanych
modułów. W wersji jądra Linux 2.5.47 i
wcześniejszych podobny plik z troszkę odmienną
zawartością był nazwany ksyms.
- /proc/kcore
- Plik ten reprezentuje pamięć fizyczną systemu i jest
zachowany w formacie pliku core dla ELF. Korzystając z tego
pseudopliku oraz z niezestripowanego binarnego pliku jądra (
/usr/src/linux/vmlinux), można za pomocą GDB
testować aktualny stan dowolnej struktury danych jądra.
Całkowity rozmiar tego pliku to rozmiar fizycznej pamięci
(RAM) plus 4 KB.
- /proc/kmsg
- Plik ten może służyć do odczytu
komunikatów jądra, zamiast funkcji systemowej
syslog(2). Aby odczytać ten plik, proces musi mieć
uprawnienia superużytkownika i tylko jeden proces powinien
dokonywać jego odczytu. Pliku tego nie należy czytać,
gdy działa proces syslog, korzystający z funkcji systemowej
syslog(2) do rejestrowania komunikatów jądra.
Z tego pliku pobiera komunikaty program dmesg(1).
- /proc/kpagecount (od Linuksa 2.6.25)
- Plik zawiera 64-bitowy licznik wskazujący ile razy zmapowano
każdą z ramek strony fizycznej, indeksowaną numerem
ramki strony (zob. opis w /proc/[pid]/pagemap).
- Plik /proc/kpagecount istnieje tylko jeśli podczas
kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/kpageflags (od Linuksa 2.6.25)
- Plik zawiera 64-bitowe maski odpowiadające każdej z ramek
strony fizycznej; indeksowanej numerem ramki strony (zob. opis w
/proc/[pid]/pagemap). Oto zestawienie poszczególnych
bitów:
0 - KPF_LOCKED
1 - KPF_ERROR
2 - KPF_REFERENCED
3 - KPF_UPTODATE
4 - KPF_DIRTY
5 - KPF_LRU
6 - KPF_ACTIVE
7 - KPF_SLAB
8 - KPF_WRITEBACK
9 - KPF_RECLAIM
10 - KPF_BUDDY
11 - KPF_MMAP (od Linuksa 2.6.31)
12 - KPF_ANON (od Linuksa 2.6.31)
13 - KPF_SWAPCACHE (od Linuksa 2.6.31)
14 - KPF_SWAPBACKED (od Linuksa 2.6.31)
15 - KPF_COMPOUND_HEAD (od Linuksa 2.6.31)
16 - KPF_COMPOUND_TAIL (od Linuksa 2.6.31)
16 - KPF_HUGE (od Linuksa 2.6.31)
18 - KPF_UNEVICTABLE (od Linuksa 2.6.31)
19 - KPF_HWPOISON (od Linuksa 2.6.31)
20 - KPF_NOPAGE (od Linuksa 2.6.31)
21 - KPF_KSM (od Linuksa 2.6.32)
22 - KPF_THP (od Linuksa 3.4)
Więcej informacji o znaczeniu tych bitów znajduje się w
pliku źródeł jądra
Documentation/vm/pagemap.txt. Przed wersją 2.6.29
jądra KPF_WRITEBACK, KPF_RECLAIM, KPF_BUDDY i
KPF_LOCKED nie były poprawnie zgłaszane.
- Plik /proc/kpageflags istnieje tylko jeśli podczas
kompilacji jądra włączono opcję
CONFIG_PROC_PAGE_MONITOR.
- /proc/ksyms (Linux 1.1.23-2.5.47)
- Patrz /proc/kallsyms.
- /proc/loadavg
- Pierwsze trzy pola w tym pliku zawierają średnie
obciążenie (loadavg) podając informację o
średniej liczbie zadań uruchomionych (stan R) oraz
czekających na dyskowe operacje wejścia/wyjścia (stan
D) w ciągu ostatnich 1, 5 i 15 minut. Są to te same
wartości średniego obciążenia, które
podaje uptime(1) i inne programy. Czwarte pole zawiera dwie liczby
oddzielone od siebie znakiem ukośnika (/). Pierwsza z nich jest
liczbą obecnie wykonywanych zadań (procesów,
wątków). Wartość za ukośnikiem jest
liczbą zadań, obecnych w systemie. Piąte pole zawiera
PID najnowszego ostatnio utworzonego procesu w systemie.
- /proc/locks
- Plik ten pokazuje aktualne blokady plików (flock(2) i
fcntl(2)) oraz dzierżawy ( fcntl(2)).
- /proc/malloc (tylko do wersji 2.2 Linuksa
włącznie)
- Ten plik istnieje tylko jeśli podczas kompilacji zdefiniowano
CONFIG_DEBUG_MALLOC.
- /proc/meminfo
- Plik zawiera statystyki nt. użycia pamięci w systemie.
Używa go free(1) do wskazania wielkości wolnej i
użytej pamięci (zarówno fizycznej jak i wymiany) w
systemie jak również pamięci dzielonej i
buforów używanych przez jądro. Każdy wiersz
składa się z nazwy parametru, dwukropka, wartości
parametru i opcjonalnej jednostki pomiaru (np. "kB").
Poniższa lista opisuje nazwy parametrów i format wymagany do
odczytu wartości pól. Z wyjątkiem wyraźnie
wskazanych pól, wszystkie są obecne od co najmniej Linuksa
2.6.0. Część pól jest wyświetlanych
tylko jeśli jądro zostało skonfigurowane z pewnymi
opcjami, te zależności zaznaczono wówczas w
opisie.
- MemTotal %lu
- Całkowity użyteczny RAM (tzn. pamięć fizyczna
RAM - kilka zarezerwowanych bitów i kod binarny jądra).
- MemFree %lu
- Suma LowFree+HighFree.
- Buffers %lu
- Relatywnie tymczasowe miejsce przechowywania surowych bloków
dyskowych które nie powinno być zbyt duże
(rzędu 20 MB).
- Cached %lu
- Bufor w pamięci przeznaczony na plik odczytane z dysku (bufora
strony). Nie obejmuje SwapCached.
- SwapCached %lu
- Pamięć, która została przeniesiona do
pamięci wymiany jest później pobierana do
pamięci i pozostawiana jednocześnie w pliku wymiany
(jeśli jest duże zapotrzebowanie na pamięć, te
strony nie muszą być ponownie przenoszone do pamięci
wymiany, ponieważ już znajdują się w pliku
wymiany. Unika się w ten sposób zbędnych operacji
wejścia/wyjścia).
- Active %lu
- Pamięć która była ostatnio używana. Z
reguły nie jest odzyskiwana poza absolutnie koniecznymi
przypadkami.
- Inactive %lu
- Pamięć która była ostatnio słabiej
używana. Nadaje się w większym stopniu do odzyskania
do innych celów.
- Active(anon) %lu (od Linuksa 2.6.28)
- [do udokumentowania]
- Inactive(anon) %lu (od Linuksa 2.6.28)
- [do udokumentowania]
- Active(file) %lu (od Linuksa 2.6.28)
- [do udokumentowania]
- Inactive(file) %lu (od Linuksa 2.6.28)
- [do udokumentowania]
- Unevictable %lu (od Linuksa 2.6.28)
- (Od Linuksa 2.6.28 do 2.6.30 wymagane było
CONFIG_UNEVICTABLE_LRU) [do udokumentowania]
- Mlocked %lu (od Linuksa 2.6.28)
- (Od Linuksa 2.6.28 do 2.6.30 wymagane było
CONFIG_UNEVICTABLE_LRU) [do udokumentowania]
- HighTotal %lu
- (od Linuksa 2.6.19 wymagane jest CONFIG_HIGHMEM) Całkowita
wielkość pamięci highmem. Jest to
pamięć powyżej ~860MB pamięci fizycznej.
Obszary highmem są przeznaczone do użycia przez programy w
przestrzeni użytkownika lub przez bufor strony. Jądro musi
używać pewnych sztuczek aby uzyskać dostęp do
tej pamięci, co czyni dostęp wolniejszym niż do
pamięci lowmem.
- HighFree %lu
- (od Linuksa 2.6.19 wymagane jest CONFIG_HIGHMEM)
Wielkość wolnej pamięci highmem.
- LowTotal %lu
- (od Linuksa 2.6.19 wymagane jest CONFIG_HIGHMEM)
Wielkość całkowita pamięci lowmem. Lowmem to
pamięć którą można użyć
do tych samych celów co highmem, lecz jest również
dostępna dla wewnętrznych struktur danych jądra. Jest
to między innymi miejsce, gdzie przydzielane jest wszystko ze
Slab. Gdy zabraknie pamięci lowmem należy się
spodziewać złych wiadomości.
- LowFree %lu
- (od Linuksa 2.6.19 wymagane jest CONFIG_HIGHMEM)
Wielkość wolnej pamięci lowmem.
- MmapCopy %lu (od Linuksa 2.6.29)
- (wymagane jest CONFIG_MMU) [do udokumentowania]
- SwapTotal %lu
- Całkowita wielkość dostępnej pamięci
wymiany.
- SwapFree %lu
- Wielkość aktualnie nieużywanej pamięci
wymiany.
- Dirty %lu
- Pamięć czekająca na ponowny zapis na dysk.
- Writeback %lu
- Pamięć zapisywana obecnie na dysk.
- AnonPages %lu (od Linuksa 2.6.18)
- Strony nie mające zapasu w postaci pliku zmapowane do tabel stron w
przestrzeni użytkownika.
- Mapped %lu
- Pliki które zostały zmapowane do pamięci (za
pomocą mmap(2)) np. biblioteki.
- Shmem %lu (od Linuksa 2.6.32)
- [do udokumentowania]
- Slab %lu
- Wewnętrzny bufor jądra przeznaczony na jego struktury
danych.
- SReclaimable %lu (od Linuksa 2.6.19)
- Część Slab, która może
być przypisana ponownie, taka jak pamięć
podręczna.
- SUnreclaim %lu (od Linuksa 2.6.19)
- Część Slab niemogąca być
przypisana ponownie przy małej ilości pamięci.
- KernelStack %lu (od Linuksa 2.6.32)
- Wielkość pamięci przypisana do stosów
jądra.
- PageTables %lu (od Linuksa 2.6.18)
- Wielkość pamięci przypisana do najniższego
poziomu tabel stron.
- Quicklists %lu (od Linuksa 2.6.27)
- (wymagane jest CONFIG_QUICKLIST) [do udokumentowania]
- NFS_Unstable %lu (od Linuksa 2.6.18)
- Strony NFS wysłane do serwera, lecz jeszcze nie wprowadzone na
stabilny nośnik.
- Bounce %lu (od Linuksa 2.6.18)
- Pamięć używana do urządzenia blokowego
"bounce buffer".
- WritebackTmp %lu (od Linuksa 2.6.26)
- Pamięć używana przez FUSE do tymczasowych
buforów pamięci z buforowaniem zapisu.
- CommitLimit %lu (od Linuksa 2.6.10)
- Jest to całkowita wielkość pamięci
dostępnej obecnie do przydzielenia w systemie wyrażona w
kilobajtach. Limit jest przestrzegany jedynie gdy włączono
ścisłe rozliczanie overcommitu (tryb 2 w
/proc/sys/vm/overcommit_memory). Limit jest obliczany na podstawie
wzoru opisanego przy /proc/sys/vm/overcommit_memory. Więcej
informacji znajduje się w pliku źródeł
jądra Documentation/vm/overcommit-accounting.
- Committed_AS %lu
- Wielkość pamięci obecnie przypisanej w systemie. Jest
to suma pamięci zaalokowanej przez procesy, nawet jeśli jej
jeszcze nie "użyły". Proces alokujący 1 GB
pamięci (za pomocą malloc(3) lub podobnej
konstrukcji), używający jedynie 300 MB pamięci,
będzie pokazywał użycie tych 300 MB pamięci,
nawet jeśli przydzielił przestrzeń adresową
dla całego 1 GB.
Ten 1 GB to pamięć "zatwierdzona" przez VM,
która może być użyta przez tę
aplikację w dowolnym czasie. Gdy włączone jest
ścisły overcommit (tryb 2 w
/proc/sys/vm/overcommit_memory) alokacja która
przekroczyłaby CommitLimit jest niedozwolona. Jest to
przydatne do zagwarantowania, że proces nie zawiedzie z powodu
braku pamięci po jej poprawnym przydzieleniu.
- VmallocTotal %lu
- Całkowity rozmiar obszaru pamięci vmalloc.
- VmallocUsed %lu
- Wielkość używanego obszaru vmalloc.
- VmallocChunk %lu
- Największy wolny ciągły blok obszaru vmalloc.
- HardwareCorrupted %lu (od Linuksa 2.6.32)
- (wymagane jest CONFIG_MEMORY_FAILURE) [do udokumentowania]
- AnonHugePages %lu (od Linuksa 2.6.38)
- (wymagane jest CONFIG_TRANSPARENT_HUGEPAGE) Duże strony nie
mające zapasu w postaci pliku zmapowane do tabel stron w
przestrzeni użytkownika.
- HugePages_Total %lu
- (wymagane jest CONFIG_HUGETLB_PAGE) Rozmiar puli dużych
stron.
- HugePages_Free %lu
- (wymagane jest CONFIG_HUGETLB_PAGE) Liczba dużych stron w
puli, które nie są jeszcze przydzielone.
- HugePages_Rsvd %lu (od Linuksa 2.6.17)
- (wymagane jest CONFIG_HUGETLB_PAGE) Jest to liczba dużych
stron które przeznaczono do przydzielenia z puli, lecz jeszcze jej
nie przeprowadzono. Zarezerwowane duże strony gwarantują,
że aplikacja będzie w stanie przypisać taką
stronę w razie błędu.
- HugePages_Surp %lu (od Linuksa 2.6.24)
- (wymagane jest CONFIG_HUGETLB_PAGE) Jest to liczba dużych
stron z puli powyżej wartości
/proc/sys/vm/nr_hugepages. Maksymalna liczba nadwyżki
dużych stron jest kontrolowana przez
/proc/sys/vm/nr_overcommit_hugepages.
- Hugepagesize %lu
- (wymagane jest CONFIG_HUGETLB_PAGE) Rozmiar dużych
stron.
- /proc/modules
- Tekstowa lista modułów, które załadowano w
systemie. Zobacz także lsmod(8).
- /proc/mounts
- Przed jądrem 2.4.19 plik ten był listą wszystkich
systemów plików zamontowanych aktualnie w systemie. Wraz z
wprowadzeniem przestrzeni nazw montowań przydzielanych dla procesu
w Linuksie 2.4.19, plik ten stał się dowiązaniem do
/proc/self/mounts, który zawiera listę punktów
montowań we własnej przestrzeni nazw montowań
procesu. Format tego pliku jest opisany w fstab(5).
- /proc/mtrr
- Memory Type Range Registers. Szczegóły można
znaleźć w pliku źródeł jądra
Linux Documentation/mtrr.txt.
- /proc/net
- Różne sieciowe pseudopliki, z których wszystkie
podają stan pewnej części warstwy sieciowej. Plik ten
zawiera struktury ASCII i dlatego nadaje się do odczytu za
pomocą cat(1). Jednak standardowy pakiet netstat(8)
daje dużo czystszy dostęp do tych plików.
- /proc/net/arp
- Zawiera zrzut tabeli ARP jądra używanej do
rozwiązywania adresów, w czytelnej postaci ASCII. Pokazane
zostaną zarówno wyuczone dynamicznie, jak i wstępnie
zaprogramowane wpisy w tabeli ARP. Format jest następujący:
IP address HW type Flags HW address Mask Device
192.168.0.50 0x1 0x2 00:50:BF:25:68:F3 * eth0
192.168.0.250 0x1 0xc 00:00:00:00:00:00 * eth0
Gdzie "IP address" jest adresem IPv4 maszyny, a "HW
type" jest rodzajem sprzętu wg RFC 826.
"Flags" są to wewnętrzne znaczniki struktury ARP
(zdefiniowane w /usr/include/linux/if_arp.h), a "HW
address" jest odwzorowaniem adresu IP w warstwie fizycznej,
jeśli jest ono określone.
- /proc/net/dev
- Pseudoplik dev zawiera informacje o stanie urządzenia sieciowego.
Zawierają one liczbę otrzymanych i wysłanych
pakietów, liczbę błędów i kolizji oraz
inne podstawowe statystyki. Informacje te są wykorzystywane przez
program ifconfig(8) do informowania o stanie urządzenia.
Format jest następujący:
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 2776770 11307 0 0 0 0 0 0 2776770 11307 0 0 0 0 0 0
eth0: 1215645 2751 0 0 0 0 0 0 1782404 4324 0 0 0 427 0 0
ppp0: 1622270 5552 1 0 0 0 0 0 354130 5669 0 0 0 0 0 0
tap0: 7714 81 0 0 0 0 0 0 7714 81 0 0 0 0 0 0
- /proc/net/dev_mcast
- Zdefiniowany w /usr/src/linux/net/core/dev_mcast.c:
indx interface_name dmi_u dmi_g dmi_address
2 eth0 1 0 01005e000001
3 eth1 1 0 01005e000001
4 eth2 1 0 01005e000001
- /proc/net/igmp
- Internetowy Protokół Zarządzania Grupami.
Zdefiniowany w /usr/src/linux/net/core/igmp.c.
- /proc/net/rarp
- Plik ten ma ten sam format, co plik arp i zawiera aktualną
bazę odwrotnych odwzorowań, używaną do
udostępniania usług odwrotnego poszukiwania adresów
rarp(8). Jeśli RARP nie jest skonfigurowane w jądrze,
to plik ten nie będzie istniał.
- /proc/net/raw
- Zawiera zrzut tabeli gniazd surowych (RAW). Większość
informacji nie jest przeznaczona do użytku innego niż
odpluskwiania. Wartość "sl" jest slotem mieszania
jądra dla gniazda, "local_address" jest parą
składającą się z lokalnego adresu i numeru
protokołu. "st" jest stanem wewnętrznym gniazda.
"tx_queue" i "rx_queue" są kolejkami danych
przychodzących i wychodzących, w sensie zużycia
pamięci jądra. Pola "tr", "tm->when"
i "rexmits" nie są używane przez gniazda surowe.
Pole "uid" zawiera efektywny UID twórcy gniazda.
- /proc/net/snmp
- Ten plik zawiera dane ASCII potrzebne bazom agenta SNMP
zarządzającym informacjami o IP, ICMP, TCP i UDP.
- /proc/net/tcp
- Zawiera zrzut tabeli gniazd TCP. Wiele informacji nie przydaje się
do użytku poza odpluskwianiem. Wartość "sl"
jest slotem mieszania jądra dla gniazda, "local_address"
jest parą składającą się z lokalnego
adresu i numeru portu. "rem_address" jest parą
składającą się ze zdalnego adresu i numeru
portu (jeśli gniazdo jest podłączone). "St"
jest stanem wewnętrznym gniazda. "tx_queue" i
"rx_queue" są kolejkami danych przychodzących i
wychodzących w sensie zużycia pamięci jądra.
Pola "tr", "tm-when" i "rexmits"
zawierają wewnętrzne informacje o stanie gniazda w
jądrze i są przydatne tylko do odpluskwiania. Pole
"uid" zawiera efektywny UID twórcy gniazda.
- /proc/net/udp
- Zawiera zrzut tabeli gniazd UDP. Wiele informacji nie przydaje się
do użytku poza odpluskwianiem. Wartość "sl"
jest slotem mieszania jądra dla gniazda, "local_address"
jest parą składającą się z lokalnego
adresu i numeru portu. "rem_address" jest parą
składającą się ze zdalnego adresu i numeru
portu (jeśli gniazdo jest podłączone). "st"
jest stanem wewnętrznym gniazda. "tx_queue" i
"rx_queue" są kolejkami danych przychodzących i
wychodzących w sensie zużycia pamięci jądra.
Pola "tr", "tm-when" i "rexmits" nie
są używane w gniazdach UDP. Pole "uid" zawiera
efektywny UID twórcy gniazda. Format jest
następujący:
sl local_address rem_address st tx_queue rx_queue tr rexmits tm->when uid
1: 01642C89:0201 0C642C89:03FF 01 00000000:00000001 01:000071BA 00000000 0
1: 00000000:0801 00000000:0000 0A 00000000:00000000 00:00000000 6F000100 0
1: 00000000:0201 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0
- /proc/net/unix
- Wymienia gniazda domeny UNIX, obecne w systemie oraz ich stan. Format jest
następujący:
Num RefCount Protocol Flags Type St Path
0: 00000002 00000000 00000000 0001 03
1: 00000001 00000000 00010000 0001 01 /dev/printer
Gdzie "Num" jest numerem wpisu w tablicy jądra,
"RefCount" jest liczbą użytkowników
gniazda, "Protocol" obecnie jest zawsze zerem, "Flags"
reprezentuje wewnętrzne znaczniki jądra,
określające stan gniazda. "Type" jest zawsze
równe "1" (Nie ma na razie w jądrze wsparcia dla
gniazd datagramowych domeny UNIX). "St" jest wewnętrznym
stanem gniazda, a ścieżka jest ścieżką
(jeśli istnieje) związaną z gniazdem.
- /proc/partitions
- Zawiera liczby główne i poboczne każdej z partycji
oraz liczby 1024-bajtowych bloków i nazwy partycji.
- /proc/pci
- Listing wszystkich urządzeń PCI znalezionych podczas
inicjalizacji jądra i ich konfiguracja.
Plik został zastąpiony nowym interfejsem /proc do PCI (
/proc/bus/pci). Stał się opcjonalny w Linuksie 2.2
(dostępny przy ustawieniu opcji CONFIG_PCI_OLD_PROC przy
kompilacji jądra). Ponownie stał się nieopcjonalny w
Linuksie 2.4. Następnie, został uznany za
przestarzały w Linuksie 2.6 (był wciąż
dostępny przy ustawieniu CONFIG_PCI_LEGACY_PROC), aż
w końcu usunięto go w Linuksie 2.6.17.
- /proc/profile (od Linuksa 2.4)
- Plik obecny jest wyłącznie jeśli jądro
zostało uruchomione z opcją profile=1 wiersza
poleceń. Jądro udostępni informacje dotyczące
profilowania w formacie binarnym gotowym do użycia przez
readprofile(1). Zapis (np. pustego łańcucha) do tego
pliku wyzeruje liczniki profilowania, a na niektórych
architekturach zapis binarnej liczby całkowitej
"mnożnika profilowania" rozmiaru sizeof(int)
ustawi częstotliwość przerwań
profilowania.
- /proc/scsi
- Katalog z pseudoplikiem scsi na pośrednim poziomie i
różnymi podkatalogami niskopoziomowych sterowników
SCSI, zawierającymi po jednym pliku dla każdego kontrolera
SCSI w danym systemie; każdy z nich podaje stan jakiejś
części podsystemu we/wy SCSI. Pliki te zawierają
struktury ASCII i dlatego nadają się do odczytu za
pomocą cat(1).
Możliwy jest też zapis do niektórych z tych
plików, w celu rekonfiguracji podsystemu, lub
przełączania różnych parametrów.
- /proc/scsi/scsi
- Jest wypisaniem wszystkich znanych jądru urządzeń
SCSI. Listing jest podobny do widzianego podczas ładowania systemu.
scsi wspiera obecnie tylko polecenie add-single-device
umożliwiające rootowi dodanie do listy znanych
urządzeń urządzenia włączonego na
gorąco.
Polecenie
echo 'scsi add-single-device 1 0 5 0' > /proc/scsi/scsi
spowoduje, że kontroler scsi1 przeprowadzi skanowanie kanału
SCSI 0 w poszukiwaniu urządzenia o ID 5 i LUN 0. Jeśli
już istnieje urządzenie o takim adresie, lub adres jest
nieprawidłowy, zostanie zwrócony błąd.
- /proc/scsi/[nazwa-sterownika]
- [nazwa-sterownika] może obecnie być jedną z:
NCR53c7xx, aha152x, aha1542, aha1740, aic7xxx, buslogic, eata_dma,
eata_pio, fdomain, in2000, pas16, qlogic, scsi_debug, seagate, t128,
u15-24f, ultrastore, or wd7000. Ukazują się te z
katalogów, dla których odpowiednie sterowniki
zarejestrowały przynajmniej jeden kontroler SCSI. Każdy
katalog zawiera jeden plik dla każdego zarejestrowanego kontrolera.
Każdy z plików kontrolera ma nazwę
odpowiadającą numerowi kontrolera, przyznanemu podczas jego
inicjacji.
Czytanie tych plików zwykle pokaże konfigurację
sterownika i kontrolera, statystyki itp.
Pisanie do tych plików umożliwia różne operacje
na różnych kontrolerach. Na przykład za pomocą
poleceń latency i nolatency root może
uaktywniać lub deaktywować kod pomiaru czasu oczekiwania dla
poleceń (command latency) w sterowniku eata_dma. Za pomocą
poleceń lockup i unlock root może
sterować symulowanym przez sterownik scsi_debug blokowaniem
magistrali.
- /proc/self
- Ten katalog odnosi się do procesu korzystającego z systemu
plików /proc i jest identyczny z katalogiem w /proc o
nazwie będącej jego PID-em.
- /proc/slabinfo
- Informacje o buforach jądra. Od Linuksa 2.6.16 plik ten istnieje
tylko jeśli podczas kompilacji jądra włączono
opcję CONFIG_SLAB. Występują
następujące kolumny w pliku /proc/slabinfo:
cache-name
num-active-objs
total-objs
object-size
num-active-slabs
total-slabs
num-pages-per-slab
Szczegóły można znaleźć w
slabinfo(5).
- /proc/stat
- statystyki jądra/systemu. Różnią się
pomiędzy architekturami. Wśród wspólnych
wpisów są:
- cpu 3357 0 4313 1362393
- Czas, wyrażony w USER_HZ (jedna setna sekundy na
większości architektur, proszę użyć
sysconf(_SC_CLK_TCK) aby uzyskać prawidłową
wartość), które system spędził w trybie
użytkownika w różnych stanach:
- user
- (1) Czas spędzony w trybie użytkownika.
- nice
- (2) Czas spędzony w trybie użytkownika z niskim priorytetem
(nice).
- system
- (3) Czas spędzony w trybie systemowym.
- idle
- (4) Czas wykorzystany na zadanie bezczynności.
Wartość powinna wynosić USER_HZ razy drugi wpis w
pseudopliku /proc/uptime.
- iowait (od Linuksa 2.5.41)
- (5) Czas oczekiwania na zakończenie
wejścia/wyjścia.
- irq (od Linuksa 2.6.0-test4)
- (6) Czas obsługi przerwań.
- softirq (od Linuksa 2.6.0-test4)
- (7) Czas obsługi przerwań programowych.
- steal (od Linuksa 2.6.11)
- (8) Czas "skradziony", który jest czasem spędzonym
w innym systemie operacyjnym podczas pracy w środowisku
zwirtualizowanym.
- guest (od Linuksa 2.6.24)
- (9) Czas spędzony podczas działania na wirtualnym procesorze
systemu operacyjnego gościa, pod kontrolą jądra
Linux.
- guest_nice (od Linuksa 2.6.33)
- (10) Czas spędzony podczas działania na wirtualnym
procesorze systemu operacyjnego gościa, pod kontrolą
jądra Linux.
- page 5741 1808
- Liczba stron, które system wstronicował i liczba tych,
które wystronicował (z dysku).
- swap 1 0
- Liczba stron wymiany, które wniesiono i wyniesiono.
- intr 1462898
- Linia ta pokazuje licznik przerwań obsłużonych od
czasu uruchomienia dla każdego możliwego przerwania
systemowego. Pierwsza kolumna określa całkowitą
liczbę wszystkich obsłużonych przerwań w tym
nienumerowanych przerwań swoistych dla architektury, każda
następna określa całkowitą
wartość dla danego numerowanego przerwania. Nienumerowane
przerwania nie są pokazywane, jedynie sumowane do
całości.
- disk_io: (2,0):(31,30,5764,1,2) (3,0):...
- (major,disk_idx):(noinfo, read_io_ops, blks_read, write_io_ops,
blks_written)
(tylko Linux 2.4)
- ctxt 115315
- Liczba przełączeń kontekstu, które
przeszedł system.
- btime 769041601
- Czas uruchomienia systemu, w sekundach od epoki: 1970-01-01 00:00:00 +0000
(UTC).
- processes 86031
- Liczba rozwidleń procesów od uruchomienia systemu.
- procs_running 6
- Liczba procesów w stanie runnable (Linux 2.5.45 i
późniejsze).
- procs_blocked 2
- Liczba procesów oczekujących na zakończenie operacji
wejścia/wyjścia (Linux 2.5.45 i
późniejsze).
- /proc/swaps
- Używane obszary wymiany. Zobacz także swapon(8).
- /proc/sys
- Katalog ten (obecny od 1.3.57) zawiera wiele plików i
podkatalogów odpowiadających zmiennym jądra. Zmienne
te mogą być odczytywane i czasem modyfikowane za
pośrednictwem systemu plików proc, jak też
przy wykorzystaniu (przestarzałej) funkcji systemowej
sysctl(2)
- /proc/sys/abi (od Linuksa 2.4.10)
- Plik może zawierać pliki z binarnymi informacjami aplikacji.
Dalsze informacje można znaleźć w pliku
Documentation/sysctl/abi.txt w źródłach
jądra Linux.
- /proc/sys/debug
- Ten katalog może być pusty.
- /proc/sys/dev
- Ten katalog zawiera informacje specyficzne dla poszczególnych
urządzeń. (np. dev/cdrom/info). W niektórych
systemach może być pusty.
- /proc/sys/fs
- Katalog zawierający pliki i podkatalogi do zmiennych jądra
związanych z systemami plików.
- /proc/sys/fs/binfmt_misc
- Dokumentacja plików z tego katalogu znajduje się w
źródłach jądra Linux w
Documentation/binfmt_misc.txt.
- /proc/sys/fs/dentry-state (od Linuksa 2.2)
- Plik zawiera informacje o statusie bufora katalogu (dcache). Zawiera
sześć liczb: nr_dentry, nr_unused,
age_limit (wiek w sekundach), want_pages (strony
żądane przez system) i dwie nieużywane
wartości.
- *
- nr_dentry jest liczbą przydzielonych dentries (wpisów
dcache). To pole jest nieużywane w Linuksie 2.2.
- *
- nr_unused jest liczbą nieużywanych dentries.
- *
- age_limit jest wiekiem w sekundach, po którym wpisy dcache
mogą być przydzielone ponownie, gdy jest zbyt mało
pamięci.
- *
- want_pages jest niezerowa, gdy jądro wywołało
shrink_dcache_pages(), ale dcache nie zostały jeszcze
przycięte.
- /proc/sys/fs/dir-notify-enable
- Plik ten może służyć do
wyłączania lub włączania interfejsu
dnotify opisanego w fcntl(2) dla całego systemu.
Wartość 0 w tym pliku wyłącza interfejs, a
wartość 1 go włącza.
- /proc/sys/fs/dquot-max
- Zawiera maksymalną liczbę buforowanych wpisów kwot
dyskowych. W niektórych (2.4) systemach nie występuje. Gdy
liczba wolnych zbuforowanych kwot dyskowych jest bardzo mała, a
jest przerażająca liczba jednoczesnych
użytkowników systemu, może istnieć potrzeba
zwiększenia tego ograniczenia.
- /proc/sys/fs/dquot-nr
- Zawiera liczbę przydzielonych wpisów kwot dyskowych oraz
liczbę wolnych wpisów kwot dyskowych.
- /proc/sys/fs/epoll (od Linuksa 2.6.28)
- Katalog zawiera plik max_user_watches, którego można
użyć, aby ograniczyć ilość
pamięci jądra używanej przez interfejs epoll.
Więcej szczegółów można
znaleźć w epoll(7).
- /proc/sys/fs/file-max
- Zawiera ogólnosystemowe ograniczenie liczby plików otwartych
przez wszystkie procesy. (Zobacz także setrlimit(2),
które może służyć procesom do
ustawiania ograniczenia dla procesu, RLIMIT_NOFILE, jako liczby
plików, które proces może otworzyć). Gdy
otrzymuje się mnóstwo komunikatów w dzienniku
jądra o przekroczeniu liczby uchwytów plików (file
handles - należy szukać komunikatów takich jak
"VFS: file-max limit <liczba> reached") , to można
spróbować zwiększyć tę
wartość:
echo 100000 > /proc/sys/fs/file-max
Stała jądra NR_OPEN narzuca górne ograniczenie
wartości, która może zostać umieszczone w
file-max.
Procesy uprzywilejowane ( CAP_SYS_ADMIN) mogą
przesłonić limit file-max.
- /proc/sys/fs/file-nr
- Jest to plik (tylko do odczytu) zawierający trzy liczby:
liczbę przydzielonych uchwytów plików (tzn.
liczbę obecnie otwartych plików), liczbę wolnych
uchwytów plików i maksymalną liczbę
uchwytów plików (tzn. tę samą
wartość co w /proc/sys/fs/file-max). Jeśli
liczba przydzielonych uchwytów plików zbliża
się do maksimów, należy rozważyć
zwiększenie ich. Przed Linuksem 2.6 jądro dynamicznie
przydzielało uchwyty, lecz nie zwalniało ich. Wolnego
uchwyty były przechowywany w liście do ponownego
przydzielenia, wartość "wolne uchwyty
plików" wskazywała na rozmiar tej listy. Duża
liczba wolnych uchwytów plików wskazywała, że
w przeszłości był moment dużego użycia
otwartych uchwytów plików. Od Linuksa 2.6 jądro
zwalnia wolne uchwyty plików, a wartość "wolne
uchwyty plików" zawsze wynosi zero.
- /proc/sys/fs/inode-max (obecny jedynie do Linuksa 2.2)
- Ten plik zawiera maksymalną liczbę
i-węzłów w pamięci. Wartość ta
powinna być 3-4 razy większa niż
wartość w file-max, gdyż stdin,
stdout i gniazda sieciowe również potrzebują
i-węzłów, aby można było na nich
operować. Gdy systematycznie brakuje i-węzłów,
istnieje potrzeba zwiększenia tej wartości.
Od jądra Linux 2.4 nie występuje statyczny limit liczby
i-węzłów, w związku z czym usunięto ten
plik.
- /proc/sys/fs/inode-nr
- Zawiera dwie pierwsze wartości z inode-state.
- /proc/sys/fs/inode-state
- Plik zawiera siedem liczb: nr_inodes, nr_free_inodes,
preshrink i cztery nieużywane wartości
(wynoszące zawsze zero).
nr_inodes jest liczbą przydzielonych przez system
i-węzłów. nr_free_inodes jest liczbą
wolnych i-węzłów.
preshrink jest niezerowe, gdy nr_inodes > inode-max
i gdy system musi przyciąć listę
i-węzłów zamiast przydzielić ich
więcej; od Linuksa 2.4 to pole jest wartością -
atrapą (wynosi zawsze zero).
- /proc/sys/fs/inotify (od wersji Linuksa 2.6.13)
- Ten katalog zawiera pliki max_queued_events,
max_user_instances i max_user_watches, których
można użyć, aby ograniczyć ilość
pamięci jądra używanej przez interfejs
inotify. Więcej szczegółów można
znaleźć w inotify(7).
- /proc/sys/fs/lease-break-time
- Określa okres ulgi, przez jaki jądro zapewnia procesowi
utrzymanie dzierżawy pliku ( fcntl(2)), a po którym
wyśle do tego procesu sygnał zawiadamiający go,
że inny proces oczekuje na otwarcie pliku. Jeśli
utrzymujący dzierżawę nie usunie jej lub nie
ograniczy swoich praw do niej w przeciągu tego czasu, jądro
wymusi zerwanie dzierżawy.
- /proc/sys/fs/leases-enable
- Ten plik może służyć do
ogólnosystemowego włączania lub
wyłączania dzierżaw plików ( fcntl(2)).
Gdy plik ten zawiera wartość 0, dzierżawy są
wyłączone. Wartość niezerowa
włącza dzierżawy.
- /proc/sys/fs/mqueue (od wersji Linuksa 2.6.6)
- Ten katalog zawiera pliki msg_max, msgsize_max i
queues_max, kontrolujące zasoby używane przez kolejki
komunikatów POSIX. Szczegółowe informacje
można znaleźć w mq_overview(7).
- /proc/sys/fs/overflowgid and /proc/sys/fs/overflowuid
- Te pliki umożliwiają zmianę wartości
ustalonego UID-u i GID-u. Wartością domyślną
jest 65534. Niektóre systemy plików wspierają jedynie
16-bitowe UID-y i GID-y, podczas gdy linuksowe UID-y i GID-y są
32-bitowe. Gdy któryś z takich systemów plików
jest zamontowany z możliwością zapisu, to wszystkie
UID-y i GID-y przekraczające 65535 są zastępowane
podanymi tu wartościami przed zapisem na dysk.
- /proc/sys/fs/pipe-max-size (od Linuksa 2.6.35)
- Wartość w tym pliku definiuje górny limit do
podnoszenia pojemności potoku przy użyciu operacji
F_SETPIPE_SZ fcntl(2). Limit ten odnosi się
wyłącznie do procesów nieuprzywilejowanych.
Domyślną wartością dla tego pliku jest
1 048 576. Wartość przypisana do pliku
może być zaokrąglona w górę,
odnosząc się do faktycznej wartości wykorzystanej z
powodu dogodnej implementacji. Aby poznać zaokrągloną
wartość, należy wyświetlić
zawartość tego pliku po przypisaniu do niego
wartości. Minimalną wartością, jaka
może zostać przypisana do tego pliku jest systemowy rozmiar
strony.
- /proc/sys/fs/protected_hardlinks (od Linuksa 3.6)
- Gdy w pliku zapisana jest wartość 0, to w odniesieniu do
tworzenia dowiązań zwykłych (twardych) nie wprowadza
się żadnych ograniczeń (jest to historyczne
zachowanie przed Linuksem 3.6). Gdy wartość wynosi 1, to
dowiązania zwykłe mogą być tworzone do pliku
docelowego jedynie wówczas, gdy spełniony jest jeden z
poniższych warunków:
- *
- Wywołujący ma przywilej CAP_FOWNER.
- *
- UID systemu plików dotyczący procesu tworzącego
dowiązanie pasują do właściciela (UID) pliku
docelowego (zgodnie z opisem w podręczniku credentials(7),
UID systemu plików procesu jest zwykle taki sam jak jego efektywny
UID).
- *
- Wszystkie poniższe warunki zostaną spełnione:
- •
- cel jest zwykłym plikiem,
- •
- plik docelowy nie ma ustawionego bitu set-user-ID,
- •
- plik docelowy nie ma ustawionych obu z bitów set-group-ID i bitu
wykonywalności dla grupy,
- •
- wywołujący ma uprawnienie do odczytu i zapisu pliku
docelowego (albo dzięki uprawnieniom pliku albo ze względu
na posiadane przywileje).
- Domyślną wartością w tym pliku jest 0.
Ustawienie 1 rozwiąże występujące od dawna
problemy z bezpieczeństwem wykorzystujących wyścig
między czasem sprawdzenia a czasem użycia dowiązania
zwykłego, zwykle spotykanych w katalogach dostępnych do
zapisu dla wszystkich (np. /tmp). Częstym sposobem
wykorzystywania tej wady jest skrzyżowanie ograniczeń w
uprawnieniach przy podążaniu za danym dowiązaniem
zwykłym (np. gdy proces root podąża za
dowiązaniem stałym utworzonym przez innego
użytkownika). W systemach bez wydzielonych partycji,
rozwiązuje się w ten sposób również
problem nieautoryzowanych użytkowników
"przypinających" dziurawe pliki z ustawionymi bitami
set-user-ID i set-group-ID wobec aktualizowanych przez administratora a
także dowiązywaniu do plików specjalnych.
- /proc/sys/fs/protected_symlinks (od Linuksa 3.6)
- Gdy w pliku zapisana jest wartość 0, to w odniesieniu do
tworzenia dowiązań symbolicznych nie wprowadza się
żadnych ograniczeń (jest to historyczne zachowanie przed
Linuksem 3.6). Gdy wartość wynosi 1, to dowiązania
symboliczne mogą być tworzone jedynie gdy spełnione
są następujące warunki:
- *
- UID systemu plików dotyczący procesu
podążającego za dowiązaniem pasują do
właściciela (UID) dowiązania symbolicznego (zgodnie z
opisem w podręczniku credentials(7), UID systemu
plików procesu jest zwykle taki sam jak jego efektywny UID),
- *
- dowiązanie nie znajduje się w katalogu dostępnych dla
wszystkich do zapisu z bitem lepkości lub
- *
- dowiązanie symboliczne i katalog w którym się ono
znajduje mają tego samego właściciela (UID)
- Wywołanie systemowe które nie podąży za
dowiązaniem symbolicznym ze względu na powyższe
ograniczenia zwróci w errno błąd
EACCES.
- Domyślną wartością w tym pliku jest 0.
Ustawienie 1 rozwiąże występujące od dawna
problemy z bezpieczeństwem wykorzystujących wyścig
między czasem sprawdzenia a czasem użycia przy uzyskiwaniu
dostępu do dowiązań symbolicznych.
- /proc/sys/fs/suid_dumpable (od wersji Linuksa 2.6.13)
- Wartość w tym pliku określa, czy pliki zrzutów
pamięci są tworzone dla programów mających
ustawiony bit set-user-ID albo chronionych w jakiś inny
sposób. Można podać trzy różne
wartości liczbowe:
- 0 (default)
- Jest to tradycyjne zachowanie (sprzed Linuksa 2.6.13). Zrzut
pamięci nie będzie tworzony dla procesu, który
zmienił swoje uprawnienia (wywołując
seteuid(2), setgid(2) lub podobną funkcję albo
gdy program miał ustawiony bit set-user-ID lub set-group-ID) albo
gdy uprawnienia nadane plikowi binarnemu programu zabraniają jego
odczytywania.
- 1 ("debug")
- Jeżeli jest to możliwe, to wszystkie procesy wykonują
zrzut pamięci. Właścicielem pliku zrzutu jest
użytkownik, którego uprawnienia do systemu plików ma
proces wykonujący zrzut. Nie są stosowane żadne
mechanizmy bezpieczeństwa. Jest to przeznaczone tylko do
celów debugowania. Ptrace nie jest sprawdzane.
- 2 ("suidsafe")
- Zrzut pamięci programu, dla którego w normalnej sytuacji
taki zrzut nie zostałby wykonany (patrz wyżej
"0"), może być odczytany tylko przez
administratora (root). Pozwala to użytkownikowi
usunąć plik ze zrzutem, ale nie pozwala na jego odczytanie.
Z powodów bezpieczeństwa w tym trybie pliki zrzutu nie
nadpisują istniejących plików. Ten tryb jest
odpowiedni, gdy administrator będzie chciał debugować
problemy w naturalnym środowisku.
- Dodatkowo, od Linuksa 3.6, /proc/sys/kernel/core_pattern musi
być absolutną ścieżką lub poleceniem
potokowym (zob. core(5)). Do dziennika jądra zapisane
zostaną ostrzeżenia, jeśli core_pattern nie
będzie się stosowało do tych reguł i nie
utworzy się zrzut pamięci.
- /proc/sys/fs/super-max
- Plik steruje maksymalną liczbą superbloków, a
więc i maksymalną liczbą systemów
plików, które jądro może zamontować.
Potrzeba zwiększenia wartości super-max
występuje tylko wtedy, gdy chce się zamontować
więcej systemów plików, niż na to pozwala
aktualna wartość super-max.
- /proc/sys/fs/super-nr
- Plik zawiera liczbę obecnie zamontowanych systemów
plików.
- /proc/sys/kernel
- Katalog zawiera pliki kontrolujące wiele parametrów
jądra, jak opisano poniżej.
- /proc/sys/kernel/acct
- Plik zawiera trzy liczby: highwater, lowwater i
frequency. Gdy włączone jest rejestrowanie
procesów w stylu BSD, wartości te sterują jego
zachowaniem. Gdy ilość wolnego miejsca w systemie
plików, na którym znajdują się logi, spada
poniżej wyrażonej w procentach wartości
lowwater, rejestrowanie jest wstrzymywane. Gdy ilość
wolnego miejsca stanie się większa niż
wyrażona w procentach wartość highwater,
rejestrowanie jest wznawiane. frequency określa, jak
często jądro będzie sprawdzać
ilość wolnego miejsca (wartość w sekundach).
Wartościami domyślnymi są 4, 2 i 30. Oznacza to,
że rejestrowanie procesów jest wstrzymywane, gdy
ilość wolnego miejsca będzie wynosiła 2% lub
mniej; wznowione zostanie, gdy wolne będzie 4% lub więcej;
zakłada się, że informacja o ilości wolnego
miejsca jest ważna przez 30 sekund.
- /proc/sys/kernel/cap_last_cap (od Linuksa 3.2)
- Patrz capabilities(7).
- /proc/sys/kernel/cap-bound (od Linuksa 2.2 do 2.6.24)
- Plik przechowuje wartość capability bounding set dla
jądra (wyrażone jako liczba dziesiętna ze znakiem).
Wartość ta jest mnożona (AND) bitowo z capabilities
dozwolonymi dla procesu podczas execve(2). Poczynając od
Linuksa 2.6.25 ogólnosystemowe capability bounding set
zostało usunięte i zastąpione bounding set na
wątek, patrz capabilities(7).
- /proc/sys/kernel/core_pattern
- Patrz core(5).
- /proc/sys/kernel/core_uses_pid
- Patrz core(5).
- /proc/sys/kernel/ctrl-alt-del
- Ten plik steruje obsługą kombinacji klawiszy Ctrl-Alt-Del.
Gdy w pliku tym znajduje się wartość 0, Ctrl-Alt-Del
jest przechwytywane i przesyłane do programu init(8) w celu
wykonania wdzięcznego restartu. Gdy wartość jest
większa od 0, reakcją Linuksa na Wulkanicznie Nerwowe
Nękanie (Vulcan Nerve Pinch (tm)) będzie natychmiastowy
restart, nawet bez zrzucenia zmodyfikowanych buforów. Uwaga: gdy
program (jak np. dosemu) korzysta z "surowego" trybu klawiatury,
Ctrl-Alt-Del jest przechwytywane przez program, zanim dotrze do warstwy
terminalowej jądra i decyzja, co z tym zrobić, zależy
od programu.
- /proc/sys/kernel/dmesg_restrict (od Linuksa 2.6.37)
- Wartość pliku określa użytkowników z
dostępem do zawartości dziennika jądra (syslog).
Wartość 0 nie nakłada żadnych
ograniczeń. Wartość 1 zawęża
dostęp do użytkowników uprzywilejowanych (zob.
syslog(2)). Od Linuksa 3.4 tylko użytkownicy z przywilejem
CAP_SYS_ADMIN mogą zmienić wartość w
tym pliku.
- /proc/sys/kernel/domainname i /proc/sys/kernel/hostname
- Te pliki mogą służyć do ustawiania nazwy
domeny i hosta NIS/YP maszyny dokładnie w ten sam sposób,
jak za pomocą poleceń domainname(1) i
hostname(1), np.:
# echo 'darkstar' > /proc/sys/kernel/hostname
# echo 'mydomain' > /proc/sys/kernel/domainname
daje taki sam efekt, jak
# hostname 'darkstar'
# domainname 'mydomain'
Należy tu zauważyć, że klasyczny
darkstar.frop.org posiada nazwę hosta "darkstar" i
domenę "frop.org" w DNS (Internetowej Usłudze Nazw
Domen - Internet Domain Name Service), których nie należy
mylić z domeną NIS (Sieciowej Usługi Informacyjnej -
Network Information Service) lub YP (Yellow Pages). Te dwa systemy nazw
domenowych zasadniczo się różnią.
Szczegółowe informacje można znaleźć na
stronie podręcznika hostname(1).
- /proc/sys/kernel/hotplug
- Plik ten zawiera ścieżkę do programu hotplug.
Domyślną wartością w tym pliku jest
/sbin/hotplug.
- /proc/sys/kernel/htab-reclaim
- (Tylko PowerPC) Jeśli do tego pliku zostanie wpisana
wartość niezerowa, htab PowerPC (zobacz: plik
Documentation/powerpc/ppc_htab.txt w źródłach
jądra) jest czyszczony za każdym razem, gdy system natrafi
na pętlę oczekiwania ("idle").
- /proc/sys/kernel/kptr_restrict (od Linuksa 2.6.38)
- Wartość określa czy adresy jądra są
pokazywane za pomocą interfejsu /proc i innych.
Wartość 0 oznacza brak ograniczeń. Gdy użyto
1, to wskaźniki jądra wypisane za pomocą formatu
%pK zostaną zastąpione zerami, chyba że
użytkownik ma przywilej CAP_SYSLOG. Przy wartości 2
wskaźniki jądra wypisane za pomocą %pK
zostaną zawsze zastąpione zerami, niezależnie od
przywilejów jakie posiada. Początkowo domyślna
wartość wynosiła 1, lecz zastąpiono ją
0 w jądrze Linux 2.6.39. Od Linuksa 3.4 tylko użytkownicy z
przywilejem CAP_SYS_ADMIN mogą zmieniać
wartość w tym pliku.
- /proc/sys/kernel/l2cr
- (Tylko PowerPC) Plik zawiera znacznik sterujący cache'em L2
płyt procesora G3. Jeśli zawiera 0, cache jest
wyłączony. Cache jest włączony, gdy plik
zawiera wartość różną od zera.
- /proc/sys/kernel/modprobe
- Plik zawiera ścieżkę do programu
ładującego moduły jądra.
Domyślną wartością jest /sbin/modprobe.
Plik jest obecny tylko, jeśli jądro zostało zbudowane
z włączoną opcją CONFIG_MODULES
(CONFIG_KMOD w Linuksie 2.6.26 i wcześniejszych). Jest on
opisany w pliku źródeł jądra Linux
Documentation/kmod.txt (obecnym tylko w jądrach 2.4 i
wcześniejszych).
- /proc/sys/kernel/modules_disabled (od Linuksa 2.6.31)
- Przełącznik wskazujący czy moduły mogą
być ładowane do modularnego jądra. Domyślna
wartość wynosi off (0), lecz można ustawić
także true (1), która spowoduje brak
możliwości ładowania i wyładowania
modułów. W takim przypadku nie da się ustawić
przełącznika z powrotem na fałsz (false). Plik jest
obecny tylko w jądrach zbudowanych z włączoną
opcją CONFIG_MODULES.
- /proc/sys/kernel/msgmax (od Linuksa 2.2)
- Zawiera ogólnosystemowe ograniczenie maksymalnej liczby
bajtów w pojedynczym komunikacie zapisywanym do kolejki
komunikatów Systemu V.
- /proc/sys/kernel/msgmni (od Linuksa 2.4)
- Określa ogólnosystemowe ograniczenie liczby
identyfikatorów kolejek komunikatów.
- /proc/sys/kernel/msgmnb (od Linuksa 2.2)
- Zawiera ogólnosystemowy parametr służący do
inicjacji ustawienia msg_qbytes tworzonych później
kolejek komunikatów. Ustawienie msg_qbytes określa
maksymalną liczbę bajtów, które mogą
zostać zapisane do kolejki komunikatów.
- /proc/sys/kernel/ngroups_max (od Linuksa 2.6.4)
- Jest to plik tylko do odczytu, który wyświetla górny
limit liczby członków grupy procesu.
- /proc/sys/kernel/ostype i /proc/sys/kernel/osrelease
- Pliki te zawierają poszczególne części z
/proc/version.
- /proc/sys/kernel/overflowgid i
/proc/sys/kernel/overflowuid
- Pliki te są kopiami plików /proc/sys/fs/overflowgid i
/proc/sys/fs/overflowuid.
- /proc/sys/kernel/panic
- Plik umożliwia dostęp (odczyt i zapis) do zmiennej
jądra panic_timeout. Jeśli jest to zero, jądro
będzie się zapętlać podczas paniki;
jeśli wartość niezerowa, to określa
liczbę sekund, po której jądro powinno się
automatycznie przeładować. Jeśli używany jest
software watchdog to zalecaną wartością jest 60.
- /proc/sys/kernel/panic_on_oops (od Linuksa 2.5.68)
- Plik ten kontroluje zachowanie jądra, kiedy wystąpi oops lub
BŁĄD. Jeśli ten plik zawiera 0, to system
próbuje kontynuować operację. Jeśli zawiera 1,
to system czeka parę sekund (aby dać procesowi klogd czas na
zapisanie wyjścia z oops), a następnie panikuje.
Jeżeli wartość w pliku /proc/sys/kernel/panic
również jest niezerowa, to nastąpi restart
komputera.
- /proc/sys/kernel/pid_max (od Linuksa 2.5.34)
- Ten plik określa wartość po której
nastąpi przewinięcie licznika PID (tj. wartość
w tym pliku jest o 1 większa niż maksymalny PID). PID-y
większe niż ta wartość nie
są alokowane, z tego powodu wartość z tego
pliku działa również jako systemowy limit
całkowitej liczby procesów i wątków.
Domyślna wartość tego pliku, czyli 32768,
określa taki sam zakres wartości PID, jak
wcześniejsze wersje jądra. Dla platform 32-bitowych 32768
jest maksymalną wartością, jaką może
przyjmować pid_max. W systemach 64-bitowych pid_max
może zostać ustawiony na dowolną
wartość, aż do 2^22 ( PID_MAX_LIMIT,
około 4 milionów).
- /proc/sys/kernel/powersave-nap (tylko PowerPC)
- Plik zawiera znacznik. Gdy jest on ustawiony, Linux-PPC używa trybu
oszczędzania energii "nap", a w przeciwnym przypadku
trybu "doze".
- /proc/sys/kernel/printk
- Patrz syslog(2).
- /proc/sys/kernel/pty (od wersji Linuksa 2.6.4)
- Ten katalog zawiera dwa pliki związane z liczbą
pseudoterminali UNIX 98 (patrz pts(4)) w systemie.
- /proc/sys/kernel/pty/max
- Plik określa maksymalną liczbę pseudoterminali.
- /proc/sys/kernel/pty/nr
- Ten plik tylko do odczytu zawiera informację o liczbie obecnie
używanych pseudoterminali.
- /proc/sys/kernel/random
- Katalog ten zawiera różne parametry sterujące
działaniem pliku /dev/random. Dalsze informacje można
znaleźć w random(4).
- /proc/sys/kernel/random/uuid (od Linuksa 2.4)
- Każdy odczyt z tego pliku przeznaczonego tylko do odczytu zwraca
losowo wygenerowany 128-bitowy UUID, jako łańcuch w
standardowym formacie UUID.
- /proc/sys/kernel/real-root-dev
- Plik ten jest udokumentowany w pliku Documentation/initrd.txt w
źródłach jądra Linux.
- /proc/sys/kernel/reboot-cmd (tylko Sparc)
- Ten plik wydaje się stanowić mechanizm podawania
argumentów SPARC-owej ładowarce systemu w ROM/Flash.
Może przekazuje jej, co zrobić po restarcie?
- /proc/sys/kernel/rtsig-max
- (Tylko w wersjach jądra nie późniejszych niż
2.6.7; patrz setrlimit(2)). Plik ten może
służyć do sterowania maksymalną liczbą
zgodnych z POSIX nieobsłużonych (w kolejkach)
sygnałów czasu rzeczywistego w systemie.
- /proc/sys/kernel/rtsig-nr
- (Tylko w wersjach jądra nie późniejszych niż
2.6.7). Plik ten podaje liczbę zgodnych z POSIX
sygnałów czasu rzeczywistego oczekujących obecnie w
kolejce.
- /proc/sys/kernel/sched_rr_timeslice_ms (od Linuksa 3.9)
- Patrz sched_rr_get_interval(2).
- /proc/sys/kernel/sched_rt_period_us (od Linuksa 2.6.25)
- Patrz sched(7).
- /proc/sys/kernel/sched_rt_runtime_us (od Linuksa 2.6.25)
- Patrz sched(7).
- /proc/sys/kernel/sem (od Linuksa 2.4)
- Plik ten zawiera 4 liczby definiujące ograniczenia semaforów
Systemu V. Są to w kolejności:
- SEMMSL
- Maksymalna liczba semaforów w zestawie semaforów.
- SEMMNS
- Ogólnosystemowe ograniczenie liczby semaforów we wszystkich
zestawiach semaforów.
- SEMOPM
- Maksymalna liczba operacji, które mogą zostać podane
w wywołaniu semop(2).
- SEMMNI
- Ogólnosystemowe ograniczenie maksymalnej liczby
identyfikatorów semaforów.
- /proc/sys/kernel/sg-big-buff
- Plik ten zawiera rozmiar bufora niskopoziomowego urządzenia SCSI
(sg). Nie można nim na razie sterować, ale można go
zmienić podczas kompilacji poprzez edycję
include/scsi/sg.h i zmianę wartości
SG_BIG_BUFF. Jednakże nie ma żadnego powodu, aby to
robić.
- /proc/sys/kernel/shm_rmid_forced (od Linuksa 3.1)
- Jeśli plik jest ustawiony na 1, to wszystkie segmenty
pamięci dzielonej Systemu V zostaną oznaczone jako
przeznaczone do zniszczenia po tym, jak liczba dołączonych
procesów spadnie do zera. Innymi słowy nie da się
wówczas utworzyć segmentów pamięci dzielonej,
które istnieją niezależnie od
dołączonych procesów.
- Efekt jest taki, że shmctl(2) IPC_RMID jest
wykonywane na wszystkich istniejących segmentach, jak
również na segmentach tworzonych w przyszłości
(dopóki plik nie zostanie zresetowany do 0). Proszę
zauważyć, że istniejące segmenty nie
dołączone do żadnego procesu zostaną
natychmiast zniszczone, jeśli tylko plik ten jest ustawiony na 1.
Ustawienie tej opcji zniszczy również segmenty utworzone,
lecz nigdy niedołączone - przy zakończeniu procesu
który utworzył dany segment za pomocą
shmget(2).
- Ustawienie tego pliku na 1 udostępnia sposób na sprawdzenie,
że wszystkie segmenty pamięci współdzielonej
Systemu V są liczone w odniesieniu do użycia zasobów
i limitów zasobów. (zob. opis RLIMIT_AS w
getrlimit(2)) do co najmniej jednego procesu).
- Ustawienie tego pliku na 1 daje niestandardowe zachowanie, które
może załamać istniejące aplikacje, dlatego
domyślną wartością pliku jest 0.
Wartość 1 może być używana tylko w
przypadku dużej wiedzy na temat semantyki aplikacji
używających pamięci współdzielonej
Systemu V w danym systemie.
- /proc/sys/kernel/shmall (od Linuksa 2.2)
- Ten plik zawiera ogólnosystemowe ograniczenie całkowitej
liczby stron pamięci wspólnej Systemu V.
- /proc/sys/kernel/shmmax (od Linuksa 2.2)
- Ten plik może służyć do odpytywania o aktualne
ograniczenie maksymalnego rozmiaru tworzonego segmentu pamięci
wspólnej (System V IPC) oraz do zmiany tego ograniczenia.
Jądro wspiera obecnie segmenty pamięci wspólnej do 1
GB. Wartością domyślną jest
SHMMAX.
- /proc/sys/kernel/shmmni (od Linuksa 2.4)
- Ten plik określa ogólnosystemową maksymalną
liczbę segmentów pamięci wspólnej Systemu V,
które można utworzyć.
- /proc/sys/kernel/sysrq
- Plik kontroluje dozwolone funkcje, które są
wywoływane przy użyciu klawisza SysRq. Domyślnie,
plik zawiera 1, oznaczające że dozwolona jest każde
możliwe żądanie SysRq (w starszych wersjach
jądra, SysRq było domyślnie wyłączone i
konieczne było włączenie go w czasie uruchomienia,
jednak ta sytuacja już nie występuje). Dozwolone
wartości w pliku:
0 - całkowicie wyłącza sysrq
1 - włącza wszystkie funkcje sysrq
>1 - maska bitowa dozwolonych funkcji sysrq, jak poniżej:
2 - włącza kontrolę poziomu logów konsoli
4 - włącza kontrolę klawiatury (SAK, unraw)
8 - włącza zrzuty procesów w celu debugowania itd.
16 - włącza polecenie sync
32 - włącza ponowne montowanie tylko do odczytu
64 - włącza sygnały procesów (term, kill,
oom-kill)
128 - pozwala na restartowanie/wyłączanie
256 - pozwala ustawiać nice wszystkich zadań czasu
rzeczywistego
Ten plik istnieje tylko jeśli podczas kompilacji jądra
włączono opcję CONFIG_MAGIC_SYSRQ. Aby
dowiedzieć się więcej, proszę zapoznać
się z plikiem Documentation/sysrq.txt w
źródłach jądra Linux.
- /proc/sys/kernel/version
- Plik zawiera tekst jak np.:
#5 Wed Feb 25 21:49:24 MET 1998
Gdzie'#5' oznacza, że jest to piąte z kolei jądro
zbudowane z tych samych źródeł, a
następująca dalej data określa, kiedy jądro
zostało zbudowane.
- /proc/sys/kernel/threads-max (od Linuksa 2.3.11)
- Ten plik określa ogólnosystemowe ograniczenie
całkowitej liczby wątków (zadań), jakie
mogą zostać utworzone w systemie.
- /proc/sys/kernel/zero-paged (tylko PowerPC)
- Plik zawiera znacznik. Gdy jest on ustawiony (niezerowy), Linux-PPC
wstępnie zeruje strony w pętli bezczynności.
Prawdopodobnie przyspiesza to get_free_pages.
- /proc/sys/net
- Ten katalog zawiera rzeczy związane z siecią.
Wyjaśnienia dotyczące niektórych plików
zawartych w tym katalogu można znaleźć w
tcp(7) i ip(7).
- /proc/sys/net/core/somaxconn
- Plik definiuje wartość cechy górnej (sufitu) do
argumentu backlog funkcji listen; patrz strona
podręcznika listen(2), aby dowiedzieć się
więcej.
- /proc/sys/proc
- Ten katalog może być pusty.
- /proc/sys/sunrpc
- Ten katalog obsługuje Sunowskie zdalne wywoływanie procedur
dla sieciowego systemu plikowego (NFS). W niektórych systemach
może nie istnieć.
- /proc/sys/vm
- Ten katalog zawiera pliki sterujące zarządzaniem
pamięcią, buforami i zarządzaniem cachem.
- /proc/sys/vm/drop_caches (od wersji Linuksa 2.6.16)
- Zapis do tego pliku powoduje zwolnienie przez jądro czystych
buforów, dentries i i-węzłów z pamięci,
powodując zwolnienie pamięci. Może być to
przydatne to testowania zarządzania pamięcią i
wykonywania powtarzalnych testów systemu plików. Zapis do
tego pliku powoduje utratę zalet buforowania, przez co może
spowodować pogorszenie ogólnej wydajności systemu.
Aby zwolnić bufor strony, proszę użyć:
echo 1 > /proc/sys/vm/drop_caches
Aby zwolnić dentries i i-węzły, proszę
użyć:
echo 2 > /proc/sys/vm/drop_caches
Aby zwolnić bufor strony, dentries i i-węzły,
proszę użyć:
echo 3 > /proc/sys/vm/drop_caches
Ponieważ zapis do tego pliku nie jest destrukcyjny i brudne obiekty
nie są zwalniane, użytkownik powinien wcześniej
uruchomić sync(1).
- /proc/sys/vm/legacy_va_layout (od wersji Linuksa 2.6.9)
- Wartość niezerowa oznacza wyłączenie nowego,
32-bitowego rozmieszczenia mapowania pamięci; jądro
będzie używać starego (2.4) rozmieszczenia dla
wszystkich procesów.
- /proc/sys/vm/memory_failure_early_kill (od Linuksa 2.6.32)
- Kontroluje jak zabijać procesy z nienaprawialnym
błędem pamięci (z reguły 2-bitowy
błąd w module pamięci), które nie mogą
być obsłużone przez jądro, wykryte w tle przez
sprzęt. W niektórych przypadkach (np. jeśli strona ma
wciąż poprawną kopię na dysku), jądro
obsłuży taki błąd w sposób
przezroczysty, bez wpływu na pracę aplikacji. Jednak
jeśli nie istnieje inna, zaktualizowana kopia danych, jądro
zabija procesy, aby zapobiec uszkodzeniu danych wynikłego z
propagacji błędu.
Plik posiada jedną z następujących
wartości:
- 1:
- Wszystkie procesy, które posiadają zmapowaną
uszkodzoną i nieprzeładowaną stronę, są
zabijane zaraz po wykryciu uszkodzenia. Proszę
zauważyć, że nie jest to obsługiwane dla
nielicznych typów stron, takich jak wewnętrzne przypisanie
danych przez jądro lub pamięć podręczna na
dysku (swap), ale działa w przypadku większości stron
użytkownika.
- 0:
- Usuwana (unmap) jest jedynie uszkodzona strona, a zabijane są
wyłącznie procesy, które chcą uzyskać
do niej dostęp.
- Zabicie jest wykonywane za pomocą sygnału SIGBUS z
si_code ustawionym na BUS_MCEERR_AO. Procesy mogą
obsłużyć tę sytuację, jeśli
chcą; proszę zapoznać się z
sigaction(2), aby dowiedzieć się więcej.
Funkcja jest aktywna wyłącznie na architekturach/platformach z
zaawansowaną, maszynową obsługą sprawdzania i
zależy od możliwości sprzętowych.
Aplikacje mogą indywidualnie przesłonić ustawienie
memory_failure_early_kill za pomocą operacji
PR_MCE_KILL prctl(2).
- Obecne tylko, jeśli jądro zostało skonfigurowane z
CONFIG_MEMORY_FAILURE.
- /proc/sys/vm/memory_failure_recovery (od Linuksa 2.6.32)
- Włącza odzyskiwanie po błędzie pamięci
(jeśli jest obsługiwane przez daną
platformę)
- 1:
- Próbuje odzyskiwać.
- 0:
- Zawsze panikuje przy błędzie pamięci.
- Obecne tylko, jeśli jądro zostało skonfigurowane z
CONFIG_MEMORY_FAILURE.
- /proc/sys/vm/oom_dump_tasks (od Linuksa 2.6.25)
- Włącza tworzenie ogólnosystemowego zrzutu zadania
(bez wątków jądra), gdy jądro wykonuje
OOM-killing. Zrzut zawiera następujące informacje o
każdym zadaniu (wątku, procesie): identyfikator
wątku, realny identyfikator użytkownika, identyfikator grupy
wątku (identyfikator procesu), rozmiar pamięci wirtualnej,
rozmiar zestawu rezydentnego, procesor któremu przydzielono
zadanie, wynik oom_adj (patrz opis /proc/[pid]/oom_adj) i
nazwę polecenia. Jest to przydatne do określenia dlaczego
OOM-killer został przywołany i zidentyfikowania zadania,
które to spowodowało.
Jeśli zawiera wartość zero, ta informacja nie jest
zrzucana. Zrobienie zrzutu stanu pamięci każdego zadania
może nie być wykonalne w bardzo dużych systemach, z
tysiącami zadań. Takie systemy nie powinny być
zmuszane do narażania się na dodatkowy spadek
wydajności w sytuacjach braku pamięci, gdy taka informacja
nie może być przydatna.
Jeśli wartość jest niezerowa, ta informacja jest
pokazywana kiedy tylko OOM-killer rzeczywiście zabija zadanie
zajmujące dużo pamięci.
Domyślną wartością jest 0.
- /proc/sys/vm/oom_kill_allocating_task (od Linuksa 2.6.24)
- Włącza lub wyłącza zabijanie zadania
kolejkującego OOM w sytuacjach braku pamięci
(Out-Of-Memory).
Jeśli jest ustawione na zero OOM-killer przeskanuje
całą listę zadań i do zabicia wybierze zadania
na podstawie heurystyki. Z reguły wybierane są zadania
zajmujące wiele pamięci, które zwalniają
dużą ilość pamięci po zabiciu.
Jeśli jest ustawione na wartość niezerową,
OOM-killer po prostu zabija zadanie, które wyzwoliło stan
braku pamięci. W ten sposób unika się potencjalnie
kosztownego skanowania listy zadań.
Jeśli /proc/sys/vm/panic_on_oom jest niezerowe, to ma ono
pierwszeństwo, niezależnie od wartości użytej
w /proc/sys/vm/oom_kill_allocating_task.
Domyślną wartością jest 0.
- /proc/sys/vm/overcommit_kbytes (od Linuksa 3.14)
- Ten zapisywalny plik zapewnia alternatywę do
/proc/sys/vm/overcommit_ratio do kontrolowania CommitLimit
gdy /proc/sys/vm/overcommit_memory ma wartość 2.
Pozwala na wykonanie overcommittu ilości pamięci w
jednostkach absolutnych (w kB), zamiast w wartościach procentowych,
jak to ma miejsce przy overcommit_ratio. W ten sposób
można osiągnąć lepszą kontrolę
CommitLimit na systemach z ekstremalnie dużą
ilością pamięci.
Tylko jeden z overcommit_kbytes lub overcommit_ratio
może działać: jeśli overcommit_kbytes
ma wartość niezerową, to jest używane do
obliczenia CommitLimit, w przeciwnym razie używane jest
overcommit_ratio. Zapisanie wartości do
któregokolwiek z plików powoduje że
wartość w drugim jest ustawiana na zero.
- /proc/sys/vm/overcommit_memory
- Plik zawiera tryb rozliczeń pamięci wirtualnej jądra.
Dopuszczalne wartości:
- 0: heurystyczny overcommit (domyślnie)
1: zawsze robi overcommit, nigdy nie sprawdza
2: zawsze sprawdza, nigdy nie robi overcommitu
- W trybie 0 nie są sprawdzane wywołania mmap(2) z
MAP_NORESERVE, a domyślne sprawdzenia są bardzo
słabe, prowadząc do ryzyka zabicia procesu przez
"OOM-killera". Pod Linuksem 2.4 jakakolwiek
wartość niezerowa oznacza tryb 1.
W trybie 2 (dostępnym od Linuksa 2.6), całkowity adres
przestrzeni wirtualnej w systemie którą można
przypisać ( CommitLimit w /proc/meminfo) jest
obliczany jako
CommitLimit = (total_RAM - total_huge_TLB) *
overcommit_ratio / 100 + total_swap
gdzie:
- *
- total_RAM jest sumą pamięci RAM w systemie;
- *
- total_huge_TLB jest sumą pamięci przeznaczoną
dla dużych stron;
- *
- overcommit_ratio jest wartością w
/proc/sys/vm/overcommit_ratio i
- *
- total_swap jest wielkością przestrzeni wymiany.
- Na przykład w systemie z 16 GB fizycznej pamięci RAM i 16 GB
pamięci wymiany, brakiem przestrzeni przeznaczonej na duże
strony i z overcommit_ratio równym 50, ta formuła
daje CommitLimit na poziomie 24 GB.
Od Linuksa 3.14, gdy wartość w
/proc/sys/vm/overcommit_kbytes jest niezerowa, to
CommitLimit jest obliczana w następujący
sposób:
CommitLimit = overcommit_kbytes + total_swap
- /proc/sys/vm/overcommit_ratio (od Linuksa 2.6.0)
- Plik zapisywalny definiujący wartość
procentową pamięci, na której można
wykonać overcommit. Domyślną wartością
jest 50. Zob. opis /proc/sys/vm/overcommit_memory.
- /proc/sys/vm/panic_on_oom (od wersji Linuksa 2.6.18)
- Włącza lub wyłącza panikę jądra
w sytuacjach braku pamięci.
Jeśli plik ma ustawioną wartość 0, OOM-killer
jądra zabija któryś z nieposłusznych
procesów. Z reguły OOM-killer jest w stanie to
wykonać i system może pracować dalej.
Jeśli plik ma ustawioną wartość 1, to
jądro zwykle panikuje przy sytuacji braku pamięci. Jednak
jeśli proces limituje przydzielanie do konkretnych
węzłów używając zasad pamięci (
mbind(2) MPOL_BIND) lub cpuset ( cpuset(7)) i te
węzły dotknie problem braku pamięci, to taki proces
może być zabity przez OOM-killer. Nie występuje
wówczas panika, ponieważ pamięć innych
węzłów może być wolna, co oznacza
że system jako całość mógł nie
osiągnąć jeszcze sytuacji braku pamięci.
Jeśli ustawiono wartość 2, to jądro zawsze
panikuje w sytuacji braku pamięci.
Domyślną wartość jest 0. 1 i 2 są
przeznaczone do poprawnej pracy klastrów mimo wystąpienia
problemów. Proszę wybrać
właściwą z nich, zgodnie z używanymi zasadami
w takich sytuacjach.
- /proc/sys/vm/swappiness
- Wartość w tym pliku kontroluje jak agresywnie jądro
przenosi strony pamięci do pamięci wymiany (swapu).
Wyższe wartości zwiększają
agresywność, mniejsze zmniejszają ją.
Domyślną wartością jest 60.
- /proc/sysrq-trigger (od Linuksa 2.4.21)
- Zapisanie znaków do tego pliku wyzwala tę samą
funkcję SysRq, jaka zostałaby wykonana przy użyciu
kombinacji ALT-SysRq-<znak> (patrz opis
/proc/sys/kernel/sysrq). Plik jest normalnie zapisywalny tylko dla
roota. Aby dowiedzieć się więcej, proszę
zapoznać się z plikiem Documentation/sysrq.txt w
źródłach jądra Linux.
- /proc/sysvipc
- Podkatalog zawierający pseudopliki msg, sem i
shm. Pliki te zawierają obiekty komunikacji
międzyprocesowej (Interprocess Communication - IPC) Systemu V
(odpowiednio: kolejki komunikatów, semafory i pamięć
wspólną) obecnie istniejące w systemie,
udostępniając informacje podobne do tych, które
są dostępne poprzez ipcs(1). Pliki te
zawierają nagłówki i są sformatowane (jeden
obiekt IPC w wierszu) w celu łatwiejszego zrozumienia.
svipc(7) podaje dodatkowe informacje o zawartości tych
plików.
- /proc/timer_list (od Linuksa 2.6.21)
- Plik tylko do odczytu udostępnia listę wszystkich
bieżących czasomierzy (wysokiej rozdzielczości),
wszystkich źródeł zdarzeń zegara i ich
parametrów w formie czytelnej dla człowieka.
- /proc/timer_stats (od Linuksa 2.6.21)
- Jest to funkcja debugowania uwidaczniające (nad)użycia
czasomierzy w systemie Linux deweloperom jądra i przestrzeni
użytkownika. Może być używana przez
deweloperów zajmujących się jądrem i
przestrzenią użytkownika do weryfikacji, czy ich kod nie
używa w nadmiarze czasomierzy. Celem jest zapobieganie
niepotrzebnym wybudzeniom, aby zoptymalizować zużycie
energii.
Jeśli jest to włączone w jądrze (
CONFIG_TIMER_STATS), lecz nie jest używane, ma narzut bliski
zera oraz relatywnie niewielki narzut struktury danych. Nawet gdy
zbieranie danych jest włączone przy rozruchu, narzut jest
niski: wszystkie blokowania następują według CPU, a
wyszukiwanie jest haszowane.
Plik /proc/timer_stats jest używany do kontrolowania funkcji
próbkowania i odczytu próbek informacji.
Funkcja timer_stats jest nieaktywna przy rozruchu. Okres próbkowania
można uruchomić poleceniem:
# echo 1 > /proc/timer_stats
Następujące polecenie zatrzymuje okres próbkowania:
# echo 0 > /proc/timer_stats
Statystyki można pozyskać przy pomocy:
$ cat /proc/timer_stats
Gdy próbkowanie jest włączone, każdy odczyt z
/proc/timer_stats daje nowo zaktualizowane statystyki. Po
wyłączeniu próbkowania, próbki informacji
są zachowywane do momentu włączenia nowego
okresu próbkowania. Pozwala to na wielokrotny odczyt.
Próbka wyniku z /proc/timer_stats:
$ cat /proc/timer_stats
Timer Stats Version: v0.3
Sample period: 1.764 s
Collection: active
255, 0 swapper/3 hrtimer_start_range_ns (tick_sched_timer)
71, 0 swapper/1 hrtimer_start_range_ns (tick_sched_timer)
58, 0 swapper/0 hrtimer_start_range_ns (tick_sched_timer)
4, 1694 gnome-shell mod_delayed_work_on (delayed_work_timer_fn)
17, 7 rcu_sched rcu_gp_kthread (process_timeout)
...
1, 4911 kworker/u16:0 mod_delayed_work_on (delayed_work_timer_fn)
1D, 2522 kworker/0:0 queue_delayed_work_on (delayed_work_timer_fn)
1029 total events, 583.333 events/sec
- Kolumny wyniku:
- *
- licznik liczby zdarzeń, po którym opcjonalnie (od Linuksa
2.6.23) występuje litera "D", jeśli jest to
licznik odraczalny;
- *
- PID procesu inicjującego czasomierz
- *
- nazwa procesu inicjującego czasomierz;
- *
- funkcja, w której czasomierz został zainicjowany i
- *
- (w nawiasach) funkcja wywołania zwrotnego związanego z
czasomierzem.
- /proc/tty
- Podkatalog zawierający psuedopliki i podkatalogi sterowników
terminali (tty) oraz protokołów sterowania linią
(line discipline).
- /proc/uptime
- Ten plik zawiera dwie liczby: czas pracy systemu (w sekundach) i
ilość czasu spędzonego na wykonywaniu procesu idle (w
sekundach).
- /proc/version
- Ten napis określa wersję obecnie działającego
jądra. Zawiera on w sobie zawartość
/proc/sys/ostype, /proc/sys/osrelease i
/proc/sys/version. Na przykład:
Linux version 1.0.9 (quinlan@phaze) #1 Sat May 14 01:51:54 EDT 1994
- /proc/vmstat (od wersji Linuksa 2.6)
- Plik ten wyświetla różne statystyki pamięci
wirtualnej.
- /proc/zoneinfo (od wersji Linuksa 2.6.13)
- Plik zawiera informacje o strefach pamięci. Może być
przydatny podczas analizowania zachowania pamięci wirtualnej.
UWAGI¶
Wiele łańcuchów znakowych (np. środowisko czy linia
poleceń) występuje w postaci wewnętrznej, z polami
zakończonymi bajtami NUL ('\0'), więc jeśli do ich
czytania użyje się
od -c lub
tr "\000"
"\n", to mogą być bardziej czytelne.
Alternatywnie,
echo `cat <plik>` działa równie
dobrze.
Ta strona podręcznika jest niekompletna, prawdopodobnie
niedokładna i należy do tych, które powinny być
bardzo często poprawiane.
ZOBACZ TAKŻE¶
cat(1),
dmesg(1),
find(1),
free(1),
ps(1),
tr(1),
uptime(1),
chroot(2),
mmap(2),
readlink(2),
syslog(2),
slabinfo(5),
hier(7),
time(7),
arp(8),
hdparm(8),
ifconfig(8),
init(8),
lsmod(8),
lspci(8),
mount(8),
netstat(8),
procinfo(8),
route(8),
sysctl(8)
Pliki w źródłach jądra Linux:
Documentation/filesystems/proc.txt Documentation/sysctl/fs.txt,
Documentation/sysctl/kernel.txt,
Documentation/sysctl/net.txt i
Documentation/sysctl/vm.txt.
O STRONIE¶
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux
man-pages. Opis projektu, informacje dotyczące zgłaszania
błędów, oraz najnowszą wersję
oryginału można znaleźć pod adresem
http://www.kernel.org/doc/man-pages/.
TŁUMACZENIE¶
Jiffy to wartość wynosząca, w
zależności od architektury, od 1 do 10 ms (4 ms w przypadku
i386).
Autorami polskiego tłumaczenia niniejszej strony podręcznika man
są: Przemek Borys (PTM) <pborys@p-soft.silesia.linux.org.pl>,
Robert Luberda <robert@debian.org> i Michał Kułach
<michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią projektu
manpages-pl; uwagi, pomoc, zgłaszanie błędów na
stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z
wersją
3.71 oryginału.