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.