Počínaje linuxovým jádrem 4.7 (commit) je umask k dispozici v /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Umask není vystaven v procfs. Došlo k pokusu o její přidání bez velkého úspěchu.
Existuje způsob, jak získat umask pomocí gdb
, jak zde bylo vysvětleno dříve:
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Mějte na paměti, že gdb zastaví proces a jeho vlákna, takže dočasná změna umask je zanedbatelná.
Pokud je to pro váš případ dobré, můžete použít tuto jednolinku:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
Další alternativou je, pokud můžete ovládat běžící proces, zapsat umask do souboru, výstupu nebo něčeho podobného a odtud jej získat.
V systému Linux s systemtap
(jako root
), můžete to udělat
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Provedení cat /proc/4321/stat
spustí tuto sondu na do_task_stat
kde máme přístup k fs->umask
pole odpovídajícího procesu' task_struct
v jádře.