GNU/Linux >> Znalost Linux >  >> Linux

Aktuální umask procesu s <pid>

Počínaje linuxovým jádrem 4.7 (commit) je umask k dispozici v /proc/<pid>/status .

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

Umask není vystaven v procfs. Došlo k pokusu o její přidání bez velkého úspěchu.

Existuje způsob, jak získat umask pomocí gdb , jak zde bylo vysvětleno dříve:

$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0

Mějte na paměti, že gdb zastaví proces a jeho vlákna, takže dočasná změna umask je zanedbatelná.

Pokud je to pro váš případ dobré, můžete použít tuto jednolinku:

$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077

Další alternativou je, pokud můžete ovládat běžící proces, zapsat umask do souboru, výstupu nebo něčeho podobného a odtud jej získat.


V systému Linux s systemtap (jako root ), můžete to udělat

stap -e 'probe kernel.function("do_task_stat") {
           printf("%o\n", $task->fs->umask);
           exit()
         }
         probe begin {system("cat /proc/4321/stat>/dev/null")}'

Provedení cat /proc/4321/stat spustí tuto sondu na do_task_stat kde máme přístup k fs->umask pole odpovídajícího procesu' task_struct v jádře.


Linux
  1. Nemůžete zabít proces Gedit z jeho Pid?

  2. Spusťte proces s výstupem v reálném čase v PHP

  3. Proměnné prostředí běžícího procesu na Unixu?

  1. Ruční vytváření kontejnerů:jmenný prostor PID

  2. Linux – Jak zrušit sdílení sítě pro aktuální proces?

  3. Jak získat PID právě zahájeného procesu

  1. Který proces má Pid 0?

  2. Jak identifikovat proces, který nemá PID?

  3. Čas zahájení procesu s časovým pásmem?