GNU/Linux >> Tutoriales Linux >  >> Linux

umask actual de un proceso con <pid>

Comenzando con Linux kernel 4.7 (commit), el umask está disponible en /proc/<pid>/status .

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

El umask no está expuesto en procfs. Hubo un intento de agregarlo sin mucho éxito.

Hay una forma de obtener el umask usando gdb , como se ha explicado aquí antes:

$ 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 subprocesos, 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 el umask en un archivo, una salida o algo similar y obtenerlo desde allí.


En Linux, con systemtap (como 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")}'

Haciendo un cat /proc/4321/stat activaría esa sonda en do_task_stat donde podemos acceder al fs->umask campo del proceso correspondiente' task_struct en el núcleo.


Linux
  1. Linux:¿cómo dejar de compartir la red para el proceso actual?

  2. Definición de una variable con o sin exportación

  3. ¿Obtener programáticamente el id principal de otro proceso?

  4. Uso de memoria del proceso actual en C

  5. ¿Variables de entorno de un proceso en ejecución en Unix?

Comando Killall en Linux con ejemplos

Comando de espera en Linux explicado con ejemplos

Gestión de procesos de Linux mejorada con htop

Ordenar la gestión de procesos con ps o systemd

Cómo encontrar el nombre del proceso a partir de su PID

Cómo obtener pid del proceso recién iniciado