24
A
回答
25
您可以将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
如果你当前的进程,你可以写一个文件到/ tmp,并检查其设置。一个更好的解决方案是调用umask(3)传递零 - 该函数返回调用之前的设置 - 然后通过将该值传递回umask将其重置。
另一个进程的umask似乎没有公开。
9
从GNU C库手册:
这里是示出如何使用
umask
读掩模不会永久改变其一个例子:mode_t read_umask (void) { mode_t mask = umask (0); umask (mask); return mask; }
然而,最好是使用
getumask
如果您只想读取 掩码值,因为它是可重入的(至少如果您使用的是GNU操作系统的 )。
getumask
是glibc特定的,但。所以如果你重视可移植性,那么非重入式解决方案是唯一的解决方案。
编辑:我刚刚通过Linux源代码grep为->umask
。没有任何地方会让你获得另一个过程的秘密。此外,没有getumask
;显然这是一个赫德唯一的事情。
0
一位同事刚刚向我展示了一个命令行模式。我总是运行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+)$/)'
2
与Linux内核4.7开始,umask是在/proc/<pid>/status
可用。
相关问题
- 1. 从已经运行的进程中获取OutputStream
- 2. 在linux中查看已经运行的进程的输出
- 3. 来自已经运行的进程的Linux总磁盘I/O
- 4. 的WriteLine到已经运行的进程
- 5. linux - 进程已经在运行的错误
- 6. 监视已经运行的进程
- 7. 在linux下Qt如何检测进程已经在运行?
- 8. 从已经运行的进程中创建子进程对象
- 9. 你如何获得一个进程已经运行了多久?
- 10. linux - 获取进程的pid
- 11. 获取时间jMeter线程已经运行
- 12. 改变已经运行的进程的信号配置(SIGHUP)
- 13. 如何把一个已经运行的子进程下的nohup
- 14. 获取OSGi运行时中已经安装的bundle的InputStream?
- 15. 是否可以附加到已经运行的gdb进程?
- 16. 将QProcess初始化为已经运行的进程
- 17. Java守护进程并连接到已经运行的实例
- 18. strace如何连接到已经运行的进程?
- 19. Python - 将参数传递给已经运行的进程
- 20. 在vb.net运行已经打开的进程
- 21. 是否可以从已经运行的进程构造ProcessStartInfo?
- 22. Linux互斥锁检查程序是否已经在运行?
- 23. 获取正在运行的进程'dimensions
- 24. 获取运行firefox进程的PID
- 25. 获取运行进程的实例
- 26. 获取从Linux的远程Windows机器上运行的进程c#
- 27. 仪器:目标无法运行:已经在退出的进程上运行
- 28. SCP和UMASK Linux Centos
- 29. 获取正在运行的进程给定的进程句柄
- 30. LINUX中的CHOWN运行进程(EC2)
当前进程?还是一个外国程序? – 2008-10-03 00:26:34
前段时间有一个[补丁](https://lkml.org/lkml/2012/5/4/451)报告了进程'/ proc/pid/status中的umask'和`/ proc/pid/stat`。但它似乎没有进入主线内核。 – 2015-11-18 04:13:19
[unix.se]上的同一问题:[当前pid进程的umask](http://unix.stackexchange.com/q/258284) – 2016-01-29 23:06:52