Linux カーネル 4.7 (コミット) から、umask は /proc/<pid>/status
で使用できます。 .
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
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