Respuestas:
A partir de Linux kernel 4.7 ( commit ), la umask está disponible en /proc/<pid>/status.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Nota: esta respuesta se aplica a los núcleos de Linux 4.6 y anteriores. Vea la respuesta de @ egmont para las versiones más nuevas del núcleo.
El umask no está expuesto en procfs. Hubo un intento de agregarlo sin mucho éxito.
Hay una manera de usar umask gdb, como se explicó anteriormente :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Tenga en cuenta que gdb detiene el proceso y sus hilos, por lo que el cambio temporal de umask es insignificante.
Si eso es bueno para su caso, puede usar este oneliner:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
Otra alternativa es, si puede controlar el proceso en ejecución, escribir la umask en un archivo, una salida o algo similar y obtenerla desde allí.
En Linux, con systemtap(as root), podrías hacer
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Hacer un cat /proc/4321/statactivaría esa sonda sobre do_task_statdónde podemos acceder al fs->umaskcampo del proceso correspondiente ' task_structen el núcleo.