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/stat
activaría esa sonda sobre do_task_stat
dónde podemos acceder al fs->umask
campo del proceso correspondiente ' task_struct
en el núcleo.