Risposte:
A partire dal kernel Linux 4.7 ( commit ), umask è disponibile in /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Nota: questa risposta si applica ai kernel Linux 4.6 e precedenti. Vedi la risposta di @ egmont per le versioni più recenti del kernel.
La umask non è esposta in procfs. Si è tentato di aggiungerlo senza molto successo.
C'è un modo per ottenere l'umask usando gdb
, come è stato spiegato qui prima :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Tieni presente che gdb interrompe il processo e i suoi thread, quindi il cambiamento temporaneo di umask è trascurabile.
Se va bene per il tuo caso, puoi usare questo oneliner:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
Un'altra alternativa è, se puoi controllare il processo in esecuzione, scrivere l'umask in un file, un output o qualcosa di simile e ottenerlo da lì.
Su Linux, con systemtap
(as root
), potresti farlo
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Fare un cat /proc/4321/stat
trigger attiverebbe quel probe su do_task_stat
dove possiamo accedere al fs->umask
campo del processo corrispondente ' task_struct
nel kernel.