GNU/Linux >> Linux Esercitazione >  >> Linux

Umask corrente di un processo con <pid>

A partire dal kernel Linux 4.7 (commit), umask è disponibile in /proc/<pid>/status .

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

L'umask non è esposto in procfs. C'è stato un tentativo 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 la modifica temporanea 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 prenderlo da lì.


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

Facendo un cat /proc/4321/stat attiverebbe quella sonda su do_task_stat dove possiamo accedere al fs->umask campo del processo corrispondente' task_struct nel kernel.


Linux
  1. Linux:come annullare la condivisione della rete per il processo corrente?

  2. Non riesci a uccidere il processo Gedit dal suo Pid?

  3. Esegui processo con output in tempo reale in PHP

  4. modelli di debug con GDB

  5. Conteggio dei file aperti per processo

Comando Killall in Linux con esempi

Comando Wait in Linux spiegato con esempi

Gestione dei processi Linux migliorata con htop

Decluttering la gestione dei processi con ps o systemd

Come trovare il nome del processo dal suo PID

Variabili d'ambiente di un processo in esecuzione su Unix?