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/statausführen, wird diese Prüfung ausgelöst, do_task_statwenn wir auf das fs->umaskFeld des entsprechenden Prozesses task_structim Kernel zugreifen können .