/proc/PID

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)

    http://man7.org/linux/man-pages/man7/capabilities.7.html

    Manpage fstab(5)

    http://man7.org/linux/man-pages/man5/fstab.5.html

    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

    http://wiki.directi.com/x/BQDUAg

    proc/pid (zuletzt geändert am 2017-06-16 19:02:11 durch p54B3835E)