プロセスの現在のumaskを取得できますか?/proc/<pid>/...
例えば?
答え1
Linuxカーネル4.7から始める(犯罪)、umaskを使用できます/proc/<pid>/status
。
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
答え2
注:この回答は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をファイル、出力などに作成してそこからインポートすることです。
答え3
Linuxでは、systemtap
(as 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