Відповіді:
Починаючи з ядра Linux 4.7 ( фіксувати ), umask доступний в /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Примітка: ця відповідь стосується ядер Linux 4.6 та новіших версій. Дивіться відповідь @ egmont щодо новіших версій ядра.
Умаск не піддається витримці. Була спроба додати його без особливого успіху.
Існує спосіб отримати umask за допомогою gdb
, як було пояснено тут раніше :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Майте на увазі, що gdb зупиняє процес та його нитки, тому тимчасова зміна umask є незначною.
Якщо це добре для вашого випадку, ви можете використовувати цей oneliner:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
Інша альтернатива - якщо ви можете керувати запущеним процесом, написати umask у файл, вихід або щось подібне і отримати його звідти.
В Linux, з systemtap
(як root
), ви могли б це зробити
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Виконання a cat /proc/4321/stat
запустить цей зонд про те, do_task_stat
де ми можемо отримати доступ до fs->umask
поля відповідного процесу ' task_struct
в ядрі.