如何在su之后找到进程的真正所有者

时间:2010-08-20 16:50:40

标签: linux process

我们有一个约定,即开发人员使用自己的用户名进入服务器,然后sudo su - django其中django是我们的应用程序运行的用户。

我需要找出哪个开发人员正在运行django脚本。使用ps faux

root     26438  0.0  0.0  90152  3320 ?        Ss   10:38   0:00  \_ sshd: fred [priv]
fred     26444  0.0  0.0  90152  1852 ?        S    10:38   0:00  |   \_ sshd:         fred@pts/0
fred     26445  0.0  0.0  66052  1560 pts/0    Ss   10:38   0:00  |       \_ -bash
root     27923  0.0  0.0 101052  1336 pts/0    S    10:46   0:00  |           \_ su -    django
django   27924  0.0  0.0  66188  1752 pts/0    S    10:46   0:00  |               \_ -   bash
django   31760  0.0  0.5 227028 42320 pts/0    S+   11:10   0:01  |                   \_     python target_script.py

我可以很容易地看到弗雷德在做什么。但是我需要编写一个脚本来处理这个信息,我发现无法用 ps ... euser,ruser,在一行中拉出“fred”和“target_script.py”。 suser,fuser都说“django”。我是否需要通过此ps faux输出来摸索以获取我需要的信息?

2 个答案:

答案 0 :(得分:1)

您使用了su - django。 “ - ”将使新shell成为登录shell(请参阅manpage of su),这会让子进程忘记其父uid。这就是为什么euser,ruser,suser,fuser都说“django”。

所以是的,你可能不得不在父进程id或“ps faux”中摸索。

答案 1 :(得分:1)

我在尝试查找相同的基本信息时发现了这个旧帖子。我发现最简单的方法是使用" loginuid"文件在/ proc / [pid]下。例如:

cat /proc/${processid}/loginuid

抱歉复活这样的老帖子,但也许有人会觉得它很有用。