免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3870 | 回复: 10
打印 上一主题 下一主题

可以通过某进程的pid来知道该进程属于哪个用户发起的吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-01 17:38 |只看该作者 |倒序浏览
在多个用户同时登陆同一Linux主机,我已知进程的pid,但需要知道该进程是哪个用户发起的(用户名、uid都行)。。。
找了半天,一直没找到实现方式。
希望前辈指点一二,谢谢~

论坛徽章:
0
2 [报告]
发表于 2010-03-01 18:23 |只看该作者
ls -l /proc/<pid>/

论坛徽章:
0
3 [报告]
发表于 2010-03-02 09:51 |只看该作者
ls -l /proc//
drangon 发表于 2010-03-01 18:23



    用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
    因为这个查询操作是相当频繁的,要是每次都从应用层再到内核去取信息返回应用层,这个开销对我来说还是大了点。
    请问还有其他更有效率的获取方式吗?谢谢

论坛徽章:
0
4 [报告]
发表于 2010-03-02 10:11 |只看该作者
ps -A -o ruid,ruser,pid | grep pid

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2010-03-02 10:14 |只看该作者
用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。
    因为 ...
magics1020 发表于 2010-03-02 09:51

太搞笑了。你干什么不通过内核?
ls 和 print 都要通过内核的。

论坛徽章:
0
6 [报告]
发表于 2010-03-02 10:21 |只看该作者
回复 5# flw


    太强悍了

论坛徽章:
0
7 [报告]
发表于 2010-03-02 10:24 |只看该作者
太搞笑了。你干什么不通过内核?
ls 和 print 都要通过内核的。
flw 发表于 2010-03-02 10:14

正是正是....

你要是想在内核里解决可以使用for_each_process宏
#define for_each_process(p) \
        for (p = &init_task ; (p = next_task(p)) != &init_task ; )

这里的p是指向struct task_struct型的指针, struct task_struct就有你想要的uid和pid了,再将uid转换为user_name;最后就是将user_name使用ipc传到user态...这样比较繁琐...

就直接读取/proc/pid/...吧

论坛徽章:
0
8 [报告]
发表于 2010-03-02 10:27 |只看该作者
太搞笑了。你干什么不通过内核?
ls 和 print 都要通过内核的。
flw 发表于 2010-03-02 10:14



    估计我没说清楚,其实我是在用户态处理fuse过来的系统调用。是在程序里需要这些信息,不用输出,所以最好不要用Shell的方式。因为本身就是每次一个系统调用过来,然后查询用户身份,要是每次都再增加一次去内核访问,我估摸着这开销是不是大了点。。。。
    要是确实只能再去内核获取信息,那我估计是不是得自己再搞套缓存机制了。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2010-03-02 10:31 |只看该作者
估计我没说清楚,其实我是在用户态处理fuse过来的系统调用。是在程序里需要这些信息,不用输出, ...
magics1020 发表于 2010-03-02 10:27

同学,你对进出内核的效率的感性认识还不够……
有个专业术语是专门说你这种现象的:过度设计是一种病态。

不要过早优化,先做出个能用的出来。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2010-03-02 10:32 |只看该作者
估计我没说清楚,其实我是在用户态处理fuse过来的系统调用。是在程序里需要这些信息,不用输出, ...
magics1020 发表于 2010-03-02 10:27


我晕,应用程序和内核打交道的方式叫系统调用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP