带有 <pid> 的进程的当前 umask

bas*_*sin 16 linux procfs

是否可以获取进程的当前 umask?/proc/<pid>/...例如从?

egm*_*ont 26

从 Linux 内核 4.7 ( commit ) 开始, umask 在/proc/<pid>/status.

$ grep '^Umask:' "/proc/$$/status"
Umask:  0022
Run Code Online (Sandbox Code Playgroud)


zua*_*azo 17

注意:此答案适用于 Linux 内核 4.6 及更早版本。有关内核的较新版本,请参阅@egmont 的答案

umask 未在 procfs 中公开。曾尝试添加它,但没有取得多大成功。

有一种方法可以使用 umask gdb,正如之前在这里解释的那样:

$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Run Code Online (Sandbox Code Playgroud)

请记住,gdb 会停止进程及其线程,因此 umask 的临时更改可以忽略不计。

如果这对你的情况有好处,你可以使用这个oneliner:

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

另一种选择是,如果您可以控制正在运行的进程,则将 umask 写入文件、输出或类似内容并从那里获取它。