查看proc/pid/mem遇到的问题。
在linux文件系统中,查看某进程的内存,如pid=23;通过命令 cat /proc/23/mem
提示:cat: mem: Operation not permitted
请问该问题是怎么回事,谢谢先。 ls -l /proc/23/mem 看一下. mem应该是个文件,我希望看到文件的内容。 回复 3# lieye_leaves
:em06: :em06:
这文件 只有 root 用户可以查看. 你没执行我上面的命令么?! 本帖最后由 lieye_leaves 于 2014-07-08 21:10 编辑
不好意思,我就是用root用户登陆的,那个控制台是否不一样,提示就是权限不够 。我用su命令也试了下。 看起来像是这个proc接口的实现问题,需要看看代码。。 # cat mem
cat: mem: Operation not permitted
如上所示。 /*
* Return zero if current may access user memory in @task, -error if not.
*/
static int check_mem_permission(struct task_struct *task)
{
/*
* A task can always look at itself, in case it chooses
* to use system calls instead of load instructions.
*/
if (task == current)
return 0;
/*
* If current is actively ptrace'ing, and would also be
* permitted to freshly attach with ptrace now, permit it.
*/
if (task_is_stopped_or_traced(task)) {
int match;
rcu_read_lock();
match = (tracehook_tracer_task(task) == current);
rcu_read_unlock();
if (match && ptrace_may_access(task, PTRACE_MODE_ATTACH))
return 0;
}
/*
* Noone else is allowed.
*/
return -EPERM;
}
2.6.32的代码,在读取时(mem_read),进行权限检查,看似只能看自己进程的mem,或者使用ptrace。所以通常都是不允许的。
我看新版本内核中,应该没有这个权限判断了,不知你用的是啥版本?
回复 7# lieye_leaves
mem_open()
__mem_open()
mm_access()
struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
{
struct mm_struct *mm;
int err;
err =mutex_lock_killable(&task->signal->cred_guard_mutex);
if (err)
return ERR_PTR(err);
mm = get_task_mm(task);
if (mm && mm != current->mm &&
!ptrace_may_access(task, mode)) {
mmput(mm);
mm = ERR_PTR(-EACCES);
}
mutex_unlock(&task->signal->cred_guard_mutex);
return mm;
}
task是 /proc/$pid/mem中 $pid对应的进程! 回复 5# lieye_leaves
我刚刚也试了一下, 你查看的可能是一个内核mod的进程, 这个好象不能直接查看. :em06:
普通用户进程是可以的. :wink:
页:
[1]
2