Umask actual de un proceso con <pid>


Respuestas:


21

A partir de Linux kernel 4.7 ( commit ), la umask está disponible en /proc/<pid>/status.

$ grep '^Umask:' "/proc/$$/status"
Umask:  0022

1
¡Esto ayudó en RHEL 7.4!
Anand Varkey Philips

Sí, y RHEL7.4 es 3.10.0, por lo que no entiendo el comentario sobre 4.7.
hagello

Correcto, algunos núcleos más antiguos no proporcionan información sobre la umask, por ejemplo 2.6.18. Sin embargo, la característica ya está allí en 3.10.0. Por lo tanto, no debe decir que esta solución no funciona antes del kernel 4.7.
Hagello

Stéphane tuvo la amabilidad de editar mi publicación para vincularla al commit que claramente dice que cuando se agregó, es mucho más reciente que 3.10. Tal vez apareció mucho antes en el kernel parcheado de RHEL, pero aún no en el kernel principal, no lo sé.
egmont

15

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í.


1
Solo para que esta respuesta también aparezca al buscar en Google esos términos, también explica cómo modificar umask del proceso en ejecución (ya que obtenerlo requiere cambiarlo temporalmente). Inicialmente lo descarté al buscar esto.
Hugues M.

4

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.