GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Aktuelle umask eines Prozesses mit <pid>

Ab Linux-Kernel 4.7 (commit) ist die umask in /proc/<pid>/status verfügbar .

$ grep '^Umask:' "/proc/$$/status"
Umask:  0022

Die umask wird in procfs nicht angezeigt. Es wurde ohne großen Erfolg versucht, es hinzuzufügen.

Es gibt eine Möglichkeit, die umask mit gdb zu erhalten , wie bereits hier erklärt:

$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0

Denken Sie daran, dass gdb den Prozess und seine Threads stoppt, sodass die vorübergehende Änderung von umask vernachlässigbar ist.

Wenn das für Ihren Fall gut ist, können Sie diesen Einzeiler verwenden:

$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077

Eine andere Alternative ist, wenn Sie den laufenden Prozess kontrollieren können, die umask in eine Datei, eine Ausgabe oder ähnliches zu schreiben und von dort zu holen.


Unter Linux mit systemtap (als root ), könnten Sie tun

stap -e 'probe kernel.function("do_task_stat") {
           printf("%o\n", $task->fs->umask);
           exit()
         }
         probe begin {system("cat /proc/4321/stat>/dev/null")}'

Eine cat /proc/4321/stat machen würde diese Sonde auf do_task_stat auslösen wo wir auf fs->umask zugreifen können Feld des entsprechenden Prozesses' task_struct im Kernel.


Linux
  1. Container von Hand bauen:Der PID-Namespace

  2. Kann den Gedit-Prozess nicht von seiner Pid aus beenden?

  3. Welcher Prozess hat Pid 0?

  4. Wie identifiziere ich einen Prozess, der keine Pid hat?

  5. Prozessstartzeit mit Zeitzone?

Killall-Befehl in Linux mit Beispielen

Wait-Befehl in Linux anhand von Beispielen erklärt

Linux-Prozessverwaltung mit htop verbessert

Entrümpeln des Prozessmanagements mit ps oder systemd

So finden Sie den Prozessnamen anhand seiner PID

Wie man einen gerade gestarteten Prozess pipi bekommt