Odpowiedzi:
Począwszy od jądra Linuksa 4.7 ( zatwierdzenie ), umask jest dostępny w /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Uwaga: ta odpowiedź dotyczy jądra Linuksa 4.6 i wcześniejszych. Zobacz odpowiedź @ egmont na nowsze wersje jądra.
Umask nie jest ujawniany w procfs. Była to próba , aby dodać go bez większego sukcesu.
Istnieje sposób na użycie umask gdb
, jak wyjaśniono wcześniej :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Należy pamiętać, że gdb zatrzymuje proces i jego wątki, więc tymczasowa zmiana umask jest znikoma.
Jeśli jest to dobre dla twojego przypadku, możesz użyć tego oneliner:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
Inną alternatywą jest, jeśli możesz kontrolować działający proces, zapisać umask do pliku, wyjścia lub czegoś podobnego i pobrać go stamtąd.
W systemie Linux z systemtap
(as root
) możesz to zrobić
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Wykonanie cat /proc/4321/stat
wywołałoby sondę, w do_task_stat
której możemy uzyskać dostęp do fs->umask
pola odpowiedniego procesu task_struct
w jądrze.