/proc/PID
Inhaltsverzeichnis
-
/proc/PID
- Anzeige
- /proc/pid/auxv
- /proc/pid/cmdline
- /proc/pid/coredump_filter
- /proc/pid/cwd
- /proc/pid/environ
- /proc/pid/exe
- /proc/pid/fd
- /proc/pid/limits
- /proc/pid/maps
- /proc/pid/mem
- /proc/pid/mountinfo
- /proc/pid/mounts
- /proc/pid/mountstats
- /proc/pid/ns/
- /proc/pid/oom_adj
- /proc/pid/oom_score
- /proc/pid/root
- /proc/pid/smaps
- /proc/pid/stat
- /proc/pid/statm
- /proc/pid/status
- /proc/pid/task
- /proc/pid/wchan
- Quellen
Hinweis: Alle Einträge mit Ausnahme von mem sind nur lesbar.
Anzeige
Bei einigen Einträgen, wie zum Beispiel /proc/pid/environ oder /proc/pid/cmdline, sind die einzelnen Werte durch 0-Bytes von einander getrennt.
Unter Linux kann man sich diese Werte mit einem der beiden Kommandos anzeigen lassen:
# cat /proc/pid/cmdline | tr "\000" "\n"
# strings -n 1 /proc/pid/cmdline
/proc/pid/auxv
Auxiliary Vector des Programms. Der Auxiliary Vector dient der Kommunikation von Informationen vom Kernel in den User Space. Dabei werden Werte wie die UID und die effektive UID bereitgestellt. Die Werte sind als Schlüssel-Wert-Paar verfügbar.
Die Bedeutung der Werte ist in getauxval(3) beschrieben.
Beispiel: Dump der Auxiliary Vector auf einem 64-Bit System
# od -t d8 /proc/self/auxv 0000000 33 140737005998080 0000020 16 395049983 0000040 6 4096 0000060 17 100 0000100 3 4194368 0000120 4 56 0000140 5 8 0000160 7 47114583068672 0000200 8 0 0000220 9 4199104 0000240 11 37937 0000260 12 37937 0000300 13 400 0000320 14 400 0000340 23 0 0000360 15 140737005920569 0000400 0 0 0000420
Beispiel: Anzeige des Auxiliary Vector durch den Loader beim Starten des Programms
# LD_SHOW_AUXV=1 /bin/true AT_SYSINFO_EHDR: 0x7fff16bfd000 AT_HWCAP: 178bfbff AT_PAGESZ: 4096 AT_CLKTCK: 100 AT_PHDR: 0x400040 AT_PHENT: 56 AT_PHNUM: 8 AT_BASE: 0x2af0ae117000 AT_FLAGS: 0x0 AT_ENTRY: 0x400d60 AT_UID: 37937 AT_EUID: 37937 AT_GID: 400 AT_EGID: 400 AT_SECURE: 0 AT_PLATFORM: x86_64
/proc/pid/cmdline
Kommandozeilenargumente dieses Prozesses. Die einzelnen Argumente sind durch 0-Bytes von einander getrennt.
/proc/pid/coredump_filter
Spezifiziert die Speichersegmente die bei einem Coredump dieses Prozesses geschrieben werden.
Die Bitmaske beschreibt, welche Seitentypen in das in den Dump geschrieben werden.
Werte:
Bit |
Beschreibung |
0 |
Privater anonymer Speicher |
1 |
Geteilter anonymer Speicher |
2 |
Eingeblendete private Dateien (via mmap(2)) |
3 |
Eingeblendete gemeinsam genutzte Dateien (via mmap(2)) |
4 |
ELF-Header |
5 |
Private Hugepages |
6 |
Gemeinsam genutzte Hugepages |
7 |
Private DAX-Seiten |
8 |
Gemeinsam genutzte DAX-Seiten |
/proc/pid/cwd
Link auf das aktuelle Arbeitsverzeichnis
/proc/pid/environ
Umgebungsvariablen dieses Prozesses. Die einzelnen Variablen sind durch 0-Bytes von einander getrennt.
/proc/pid/exe
Link auf das Programm dieses Prozesses
/proc/pid/fd
Verzeichnis mit allen offenen Filedeskriptoren als Link auf die betreffende Datei
/proc/pid/limits
Zeigt eine Übersicht über alle Resource Limits des Prozesses inkl. Soft Limit, Hard Limit und Einheit an:
# cat /proc/$$/limits Limit Soft Limit Hard Limit Units Max cpu time unlimited unlimited seconds Max file size unlimited unlimited bytes Max data size unlimited unlimited bytes Max stack size 8388608 unlimited bytes Max core file size 0 unlimited bytes Max resident set unlimited unlimited bytes Max processes 14644 14644 processes Max open files 1024 4096 files Max locked memory 65536 65536 bytes Max address space unlimited unlimited bytes Max file locks unlimited unlimited locks Max pending signals 14644 14644 signals Max msgqueue size 819200 819200 bytes Max nice priority 0 0 Max realtime priority 0 0 Max realtime timeout unlimited unlimited us
/proc/pid/maps
Jedes Feld in /proc/pid/maps (mit Ausnahme des Image-Namens) gehört zu einem Feld in struct vm_area_struct und wird in der folgenden Liste beschrieben:
Adresse |
Erste und letzte virtuelle Adresse dieses Speicherbereichs |
Berechtigungen |
Eine Bitmaske, die die Zugriffsrechte für das Lesen, Schreiben und Ausführen des Speicherbereichs enthält. Mit diesen Rechten wird angegeben, was der Prozeß mit den zu diesem Bereich gehörenden Seiten machen darf.BRr = readBRs= writeBRx = executeBRs = sharedBRp = private (copy on write) |
Offset |
Gibt an, wo der Speicherbereich in der eingeblendeten Datei beginnt. Der Wert 0 bedeutet natürlich, daß die erste Seite des Speicherbereichs der ersten Seite der Datei entspricht. |
Device |
Die Major- und Minor-Nummern des Geräts, das die eingeblendete Datei enthält. Verwirrenderweise verweisen die Major- und Minor-Nummern bei Geräte-Einblendungen auf die Gerätedatei, die vom Benutzer geöffnet wurde, und nicht auf das Gerät selbst. |
Inode |
Die Inode-Nummer der eingeblendeten Datei. |
Pfad |
Der Name der Datei (normalerweise ein ausführbares Image), die eingeblendet worden ist. Es gibt einige hilfreiche Pseudo-Pfade, wie z.B. Heap, der Stack des Main Threads ([stack]) oder die Stacks von Threads ([stack:<Thread ID>). |
Beispiel:
# cat /proc/4587/maps 00400000-00401000 r-xp 00000000 08:01 796697 /home/carsten/test_threads 00600000-00601000 r--p 00000000 08:01 796697 /home/carsten/test_threads 00601000-00602000 rw-p 00001000 08:01 796697 /home/carsten/test_threads 01d41000-01d62000 rw-p 00000000 00:00 0 [heap] [...] 7ff80307d000-7ff80307e000 ---p 00000000 00:00 0 7ff80307e000-7ff80447e000 rw-p 00000000 00:00 0 [stack:12774] [...] 7ffd1351a000-7ffd1353b000 rw-p 00000000 00:00 0 [stack] 7ffd13563000-7ffd13565000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Das Kommando pmaps zeigt die gleichen Informationan an und bereitet sie dabei etwas besser lesbar auf.
/proc/pid/mem
Hauptspeicher der vom Prozeß verwendet wird
/proc/pid/mountinfo
Diese Datei enthält Details zu den einzelnen Mounts.
Beispiel:
# cat /proc/self/mountinfo 17 37 0:3 / /proc rw,nosuid,nodev,noexec,relatime shared:5 - proc proc rw 18 37 0:16 / /sys rw,nosuid,nodev,noexec,relatime shared:6 - sysfs sysfs rw [...] 37 1 8:1 / / rw,relatime shared:1 - ext4 /dev/sda1 rw,stripe=64,data=ordered [...] 79 37 0:36 / /data rw,nosuid,relatime shared:60 - nfs myfiler:/vol/data rw,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.100.1,mountvers=3,mountport=4046,mountproto=udp,local_lock=none,addr=172.20.15.77
Aufbau:
Spalte |
Beschreibung |
1 |
Eindeutige ID des Mounts |
2 |
ID des übergeordneten Mounts |
3 |
Major- und Minor-Nummer des Dateisystems |
4 |
Wurzel des Mounts innerhalb des Dateisystems |
5 |
ount-Punkt relativ zum Root-Verzeichnis des Prozesses |
6 |
Mount-Optionen |
7 |
Optionale Felder in der Form Tag[:Wert] |
8 |
Markiert das Ende der optionalen Felder, ist immer - |
9 |
Typ des Dateisystems in der Form Typ[.Untertyp] |
10 |
Quelle des Dateisystems |
11 |
Optionen pro Superblock |
/proc/pid/mounts
Liste aller im Mount Namespace des Prozesses eingebundenen / sichtbaren Dateisysteme. Das Format dieser Einträge entspricht dem in /etc/fstab und ist in fstab(5) beschrieben.
/proc/pid/mountstats
Diese Datei enthält die Konfiguration der einzelnen Mounts. Bei NFS-Shares werden zusätzliche statistische Informationen angezeigt.
Beispiel:
# cat /proc/self/mountstats device rootfs mounted on / with fstype rootfs device proc mounted on /proc with fstype proc device sysfs mounted on /sys with fstype sysfs [...] device myfiler:/vol/data mounted on /data with fstype nfs statvers=1.1 opts: rw,vers=3,rsize=65536,wsize=65536,namlen=255,acregmin=3,acregmax=60,acdirmin=30,acdirmax=60,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.100.1,mountvers=3,mountport=4046,mountproto=udp,local_lock=none age: 2931976 caps: caps=0x3fe7,wtmult=512,dtsize=32768,bsize=0,namlen=255 sec: flavor=1,pseudoflavor=1 events: 424 196955 1 83 230 86 291924 9 0 24 7 248 126 6 1914 25 0 165 0 0 9 1 0 0 0 0 0 bytes: 563490 396 0 0 155483 398 52 7 RPC iostats version: 1.0 p/v: 100003/3 (nfs) xprt: tcp 891 1 1 0 20 197579 197579 0 197580 0 2 0 1 per-op statistics NULL: 0 0 0 0 0 0 0 0 GETATTR: 424 424 0 48460 47488 0 190 193 SETATTR: 6 6 0 892 864 0 4 4 LOOKUP: 133 133 0 17096 26588 0 71 72 ACCESS: 196315 196315 0 24340608 23557800 433 84865 86154 READLINK: 4 4 0 440 528 0 1 1 READ: 24 24 0 2988 158584 0 427 427 WRITE: 7 7 0 1388 1120 0 3 3 CREATE: 6 6 0 1028 1632 0 4 4 MKDIR: 0 0 0 0 0 0 0 0 SYMLINK: 0 0 0 0 0 0 0 0 MKNOD: 1 1 0 168 272 0 0 0 REMOVE: 2 2 0 292 288 0 1 1 RMDIR: 0 0 0 0 0 0 0 0 RENAME: 1 1 0 212 260 0 0 0 LINK: 0 0 0 0 0 0 0 0 READDIR: 0 0 0 0 0 0 0 0 READDIRPLUS: 3 3 0 416 18728 0 10 10 FSSTAT: 153 153 0 17064 25704 0 108 108 FSINFO: 4 4 0 432 656 0 1 1 PATHCONF: 1 1 0 108 140 0 0 0 COMMIT: 0 0 0 0 0 0 0 0
/proc/pid/ns/
Dieses Unterverzeichnis enthält einen Eintrag pro veränderbaren Namespace.
/proc/pid/oom_adj
oom_adj und die Lebensdauer des Prozesses sind zwei von mehreren Werten, mit denen die "Badness" des Prozesses für den oom_killer berechnet wird. Das Ergebnis dieser Berechnung steht in oom_score.
- Charakteristik
- Dynamisch änderbar: Ja
- Wertebereich: -17 bis +15, -17 deaktiviert den oom_killer
- Standard: 0
Beispiel: oom_killer für den Prozeß mit der PID 8948 deaktivieren
# cat /proc/8948/oom_score 299 # echo -17 > /proc/8948/oom_adj # cat /proc/8948/oom_score 0
/proc/pid/oom_score
Punktzahl, die die "Badness" des Prozesses beschreibt. Der oom_killer beendet den Prozeß mit der höchsten Punktzahl zuerst. Prozesse mit dem Wert 0 werden nicht beendet.
- Charakteristik
- Dynamisch änderbar: Nur lesbar
/proc/pid/root
Link auf das Root-Verzeichnis dieses Prozesses. Über diesen Einträg läßt sich feststellen ob der Prozeß in einer chroot()-Umgebung läuft.
/proc/pid/smaps
Zeigt die Speichernutzung eines Prozesses auf Basis der einzelnen Bereiche dar.
Beispiel:
7fa898f87000-7fa898f93000 r-xp 00000000 08:01 407259 /lib64/libnss_files-2.12.so Size: 48 kB Rss: 16 kB Pss: 0 kB Shared_Clean: 16 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 16 kB Swap: 0 kB KernelPageSize: 4 kB MMUPageSize: 4 kB
Die Informationen der ersten Zeile entsprechen den Eintrag in /proc/pid/maps.
Bedeutung der verbleibenden Zeilen:
Size |
Größe des Bereichs |
Rss |
Anteil dieses Bereiches, der sich im RAM befindet (Resident Set Size). Dieser Bereich wird nicht mit anderen Prozessen geteilt. |
Pss |
Relativer Anteil an gemeinsam genutzten Seiten (gemeinsam genutzer Speicher / Anzahl der Nutzer) (Proportional Share Size) |
Shared_Clean |
Menge der nicht geänderten gemeinsam genutzten Seiten |
Shared_Dirty |
Menge der geänderten gemeinsam genutzten Seiten |
Private_Clean |
Menge der nicht geänderten privaten Seiten |
Private_Dirty |
Menge der geänderten privaten Seiten |
Referenced |
Menge des Segments, die referenziert wurde oder auf die zugegriffen wurde |
Swap |
In den Swap Space ausgelagerter Speicher |
KernelPageSize |
Größe einer Seite des Kernels |
MMUPageSize |
Größe einer Seite der MMU |
Das Kommando pmaps -X zeigt die gleichen Informationan an und bereitet sie dabei etwas besser lesbar auf.
/proc/pid/stat
Prozeßstatus
/proc/pid/statm
Statusinformationen über den Prozeßspeicher.
# cat /proc/1/statm 126 126 112 7 1 118 9
Bedeutung der Zahlen von links nach rechts:
size |
Gesamtgröße des Programmes in Seiten |
resident |
Im Hauptspeicher resistender Teil des Programmes (resistend set size) |
shared |
Anzahl der number gemeinsam genutzten Seiten (shared) |
trs |
Anzahl der Code-Seiten (Text-Segmente) |
drs |
Anzahl der Daten- / Stack-Seiten |
lrs |
Anzahl der Seiten die von Bibliotheken stammen (number of pages of library) |
dt |
Anzahl der "dirty"-Seiten |
/proc/pid/status
Zusammenfassung des Inhalts von stat und statm in menschenlesbarer Form
# cat /proc/1/status Name: init State: S (sleeping) Tgid: 1 Pid: 1 PPid: 0 TracerPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 Utrace: 0 FDSize: 64 Groups: VmPeak: 25556 kB VmSize: 25520 kB VmLck: 0 kB VmHWM: 1544 kB VmRSS: 1336 kB VmData: 208 kB VmStk: 88 kB VmExe: 132 kB VmLib: 2488 kB VmPTE: 72 kB VmSwap: 0 kB Threads: 1 SigQ: 0/13867 SigPnd: 0000000000000000 ShdPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000001000 SigCgt: 00000001a0016623 CapInh: 0000000000000000 CapPrm: ffffffffffffffff CapEff: fffffffffffffeff CapBnd: ffffffffffffffff Cpus_allowed: 1 Cpus_allowed_list: 0 Mems_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001 Mems_allowed_list: 0 voluntary_ctxt_switches: 69119 nonvoluntary_ctxt_switches: 47
- Name
- Dateiname des Programmes
- State
- Zustand des Prozesses
- Mögliche Werte:
D (disk sleep)
Prozess wartet auf auf Daten von der Festplatte
R (running)
Prozess läuft oder wartet in der Run Queue auf seine Ausführung
S (sleeping)
Prozess schläft unterbrechbar
T (stopped)
Ausführung des Prozesses wurde gestoppt, nach dem dieser eines der Signale SIGSTOP, SIGTSTP, SIGTTIN oder SIGTTOU empfangen hat
T (tracing stop)
Ausführung des Prozesses wurde durch einen Debugger angehalten
W (waking)
Prozeß der gerade aufwacht
X (dead)
Letzte Zustand eines Prozesses, während dieser gerade durch das System entfernt wird. Der Wechsel von Zombie nach Dead verhindert Race Conditions Aufrufen von wait() o.ä. durch den Elternprozeß. Diesen Zustand sollte man nie sehen.
Z (zombie)
Prozeß wurde beendet und wartet noch auf den Elternprozeß, bis dieser wait() o.ä. aufruft.
- Tgid
- Gruppen-ID der Threads
- Pid
- Eigene Prozeß-ID (PID)
- PPid
- PID des Elternprozesses
- TracerPid
- Prozeß-ID des tracenden Prozesses
Hardcodiert immer 0 beim 2.4-er Kernel
- Uid
- (reale) UID, effektive UID, gesicherte (saved) UID, UID für Dateisystemzugriffe
- Gid
- (reale) GID, effektive GID, gesicherte (saved) GID, GID für Dateisystemzugriffe
- FDSize
- Maximum von offenen Dateien eines Prozesses.
- Dieser Wert wird bei Bedarf erhöht.
Er beschreibt das Maximum von offenen Dateien, die die interne Struktur files_struct eines Prozesses aufnehmen / verwalten kann.
- Groups
- Gruppen in denen der Nutzer des Prozesses Mitglied ist
- VmPeak
Spitzenwert von VmSize
- VmSize
- Der gesamte Speicherverbrauch des Prozesses. Enthalten sind Text- und Datensegment, Stack, statische Variablen sowie Seiten, die mir anderen Prozessen geteilt werden.
- VmLck
- Menge des Prozeßspeichers, der aktuell vom Kernel gesperrt ist. Gesperrter Speicher kann nicht ausgelagert werden.
- VmHWM
- Spitzenwert der Resident Set Size ("high water mark")
- VmRSS
- Schätzung des Kernels der Resident Set Size für diesen Prozeß.
- VmData
- Speicher der für den Datenbereich des Prozesses genutzt wird. Statische Variablen und das Datensegment sind im Gegensatz zum Stack enthalten.
- VmStk
- Menge des Speichers der für den Stack des Prozesses verwendet wird.
- VmExe
- Größe der als ausführbar markierten Speicherseiten des Prozesses.
- VmLib
- Größe der Shared Memory-Seiten, die in den Adressbereich dies Prozesses einbelendet wurden. Dies schließt geteilte Seiten aus, die IPC im Stil des System V nutzen.
- VmPTE
- Größe eines Eintrags in der Page Table
- VmSwap
- Größe des in den Swap Space ausgelagerten Speichers
- Threads
- Anzahl der Thread dieses Prozesses
- SigQ
- Die erste Zahl ist die Anzahl der Signale für die reale UID dieses Prozesses, die auf die Abarbeitung warten.
- Die zweite Zahl ist die maximale Anzahl von wartenden Signalen für diesen Prozeß (siehe RLIMIT_SIGPENDING in getrlimit(2))
- SigPnd
- Bitmaske aller aller auf die Abarbeitung wartenden Signale für diesen Thread
- ShdPnd
- Bitmaske aller aller auf die Abarbeitung wartenden Signale für diesen Prozeß und aller seiner Threads
- SigBlk
- Bitmaske aller Signale die geblockt sind
- SigIgn
- Bitmaske aller Signale die ignoriert werden
- SigCgt
- Bitmaske aller Signale die empfangen wurden
- CapInh
Vererbbare Capabilities, diese Fähigkeiten bleiben auch nach dem Aufruf eines anderen Programmes via execve() erhalten
- CapPrm
- Zulässige Capabilities
- CapEff
- Effektive Capabilities
- CapBnd
- Capability Bounding set
- Cpus_allowed
- Bitmaske aller CPUs auf denen dieser Prozeß laufen kann
- Cpus_allowed_list
Der Inhalt von Cpus_allowed als Liste
- Mems_allowed
- Bitmaske aller Memory Nodes die dieser Prozeß nutzen kann
- Mems_allowed_list
Der Inhalt von Mems_allowed als Liste
- voluntary_ctxt_switches
- Anzahl der freiwilligen Context Switche
- nonvoluntary_ctxt_switches
- Anzahl der unfreiwilligen Context Switche
/proc/pid/task
In diesem Verzeichnis befinden sich alle Threads dieses Prozesses. Der Aufbau entspricht grundsätzlich dem von /proc/pid.
/proc/pid/wchan
Symbolischer Name der Stelle im Kernel, wo der Prozess "schläft".
# ps l F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 0 37937 7752 13346 16 0 8388 772 - R+ pts/0 0:00 ps l 0 37937 13346 13345 16 0 9880 1636 wait Ss pts/0 0:00 -ksh # cat /proc/13346/wchan do_wait
Quellen
- Manpage ''proc(5)''
siehe proc
- Manpage capabilities(7)
- Manpage fstab(5)
- linux/Documentation/filesystems/proc.txt
- Linux-Gerätetreiber
Alessandro Rubini & Jonathan Corbet
- 2. Auflage April 2002
- ISBN 3-89721-138-6
http://www.oreilly.de/german/freebooks/linuxdrive2ger/mem.html
- Understanding Processes in Linux