我正在尝试编写一个脚本来检查正在运行的进程的内存使用情况。为此,它需要读取 /proc/*/smaps 文件。
root 拥有的进程的权限设置为“-r--r--r--”,这应该每个人都可以读懂,对吧?
ls -l 的示例输出 [编辑:现在具有目录权限]
ls -l /proc/939/smaps
-r--r--r-- 1 root root 0 2012-07-11 12:11 /proc/939/smaps
ls -ld /proc/939/smaps
-r--r--r-- 1 root root 0 2012-07-11 12:11 /proc/939/smaps
尝试阅读:
cat /proc/939/smaps
cat: /proc/939/smaps: Permission denied
这里我遗漏了一些明显的东西吗?
EDIT2:经过进一步调查,其他文件(例如 /proc//cmdline)是可读的,所以它可能只是 smaps 文件的一个特例?
答案1
出于安全原因,读取/proc/PID/smaps
需要该CAP_SYS_PTRACE
能力。
您可以使用 向您的应用程序添加此功能sudo setcap cap_sys_ptrace+ep YOUR_APPLICATION
。