Ist es möglich, die aktuelle Umask eines Prozesses abzurufen? Von /proc/<pid>/...
zum Beispiel?
Ist es möglich, die aktuelle Umask eines Prozesses abzurufen? Von /proc/<pid>/...
zum Beispiel?
Antworten:
Ab Linux Kernel 4.7 ( Commit ) ist die Umask in verfügbar /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Hinweis: Diese Antwort gilt für Linux-Kernel 4.6 und früher. Siehe @ egmonts Antwort für neuere Versionen des Kernels.
Die Umask ist in procfs nicht verfügbar. Es wurde versucht , es ohne großen Erfolg hinzuzufügen.
Es gibt eine Möglichkeit, die Umask zu verwenden gdb
, wie hier zuvor erläutert wurde :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Beachten Sie, 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 Oneliner 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 besteht darin, wenn Sie den laufenden Prozess steuern können, die Umask in eine Datei, eine Ausgabe oder ähnliches zu schreiben und von dort abzurufen.
Unter Linux könnten Sie mit systemtap
(as root
) 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")}'
Wenn Sie a cat /proc/4321/stat
ausführen, wird diese Prüfung ausgelöst, do_task_stat
wenn wir auf das fs->umask
Feld des entsprechenden Prozesses task_struct
im Kernel zugreifen können .