-->

Linux的:得到一个已经运行的进程的umask的?(linux: getting umask of

2019-09-02 20:42发布

如何检查当前正在运行的程序的umask的?

[更新:另一种方法,而不是当前的过程。]

Answer 1:

您可以将gdb来正在运行的进程,然后在调试器中调用的umask:

(gdb) call umask(0)
[Switching to Thread -1217489200 (LWP 11037)]
$1 = 18
(gdb) call umask(18)
$2 = 0
(gdb) 

(注:18 = O22)

这表明,有可能是一个非常丑陋的方式使用ptrace函数来获得的umask。



Answer 2:

从GNU C库手册:

这里是表示如何读取与掩模的示例umask而不永久更改它:

 mode_t read_umask (void) { mode_t mask = umask (0); umask (mask); return mask; } 

但是,它是更好地使用getumask如果你只是想读的屏蔽值,因为它是折返的(至少如果你使用GNU操作系统)。

getumask是glibc的特异性,虽然。 所以,如果你看重便携性,那么非折返解决方案是唯一一个没有。

编辑:我刚刚grepped为->umask全部通过Linux的源代码。 有无处,将让你一个不同的进程的umask。 此外,没有getumask ; 显然,这是一个赫德唯一的事情。



Answer 3:

与Linux内核4.7开始,umask是可用/proc/<pid>/status



Answer 4:

如果你当前的进程,你可以写一个文件到/ tmp,并检查其设置。 一个更好的解决方法是调用的umask(3)使零 - 该函数返回调用之前的设置 - 然后通过使该值返回到的umask重置回来。

对另一个进程的umask似乎并没有被曝光。



Answer 5:

一位同事刚给我看了这个命令行模式。 我总是有emacs的运行,所以这是在下面的例子。 该perl是我的贡献:

sudo gdb --pid=$(pgrep emacs) --batch -ex 'call/o umask(0)' -ex 'call umask($1)' 2> /dev/null | perl -ne 'print("$1\n")if(/^\$1 = (\d+)$/)'


文章来源: linux: getting umask of an already running process?
标签: linux unix umask