プロセスの現在のumaskを取得することは可能ですか?たとえば/proc/<pid>/...
から?
Linuxカーネル4.7( commit )以降、umaskは/proc/<pid>/status
。
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
注:この回答はLinuxカーネル4.6以前に適用されます。カーネルの新しいバージョンについては @ egmontの回答 を参照してください。
Umaskはprocfsで公開されていません。 試行 があり、あまり成功せずに追加されました。
説明されているように、gdb
を使用してumaskを取得する方法があります 前の例 :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Gdbはプロセスとそのスレッドを停止するため、umaskの一時的な変更は無視できることに注意してください。
それがあなたのケースに適している場合は、このワンライナーを使用できます:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
もう1つの方法は、実行中のプロセスを制御できる場合は、umaskをファイル、出力、または同様のものに書き込み、そこから取得することです。
Linuxでは、systemtap
を(root
として)使用すると、
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
cat /proc/4321/stat
を実行すると、do_task_stat
でプローブがトリガーされ、カーネル内の対応するプロセスのfs->umask
のtask_struct
フィールドにアクセスできます。