当前位置:  开发笔记 > 运维 > 正文

linux:获取已经运行的进程的umask?

如何解决《linux:获取已经运行的进程的umask?》经验,为你挑选了2个好方法。

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

[更新:另一个流程,而不是当前流程.]



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可能有一种非常丑陋的方式.


如果你像我一样困惑 - 行'$ 1 = 18`意味着过程umask之前是18(八进制022).

2> Chris Jester..:

从GNU C Library手册:

下面是一个示例,说明如何在umask 不更改永久更改掩码的情况下读取掩码:

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

但是,getumask如果您只想读取掩码值,最好使用它,因为它是可重入的(至少如果您使用GNU操作系统).

getumask但是,它是特定于glibc的.因此,如果您重视可移植性,那么不可重入的解决方案就是唯一的解决方案.

编辑:我刚刚->umask通过Linux源代码获取了所有内容.无处可以获得不同过程的umask.也没有getumask; 显然这只是赫德的事情.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有