如何获取父进程的用户?

How to get the user of the parent process?

我正在编写一个程序,它使用自己的配置文件(在 /etc/program/ 和 ~/.config/program/ 中) 问题是有时它需要以 root 身份执行(所以大部分时间使用 sudo),在这种情况下 ~/.config/program 实际上是在 root 的目录中(在我的例子中是 /root) 即使与 sudo 一起使用,我也希望我的程序使用用户的配置文件。我的想法是首先获取父程序的 PID(在我的例子中为 BASH)——通常由普通用户执行——然后获取执行父程序的用户的名称。我很容易找到如何获取 PPID,但我没有找到如何找到用户名。

我想像这样的脚本:

parents_name=$(echo $PPID | *command_which_gives_the_name_from_a_PID*)

. /home/$parents_name/.config/program # includes the user's config file

希望有人有遮阳篷!

sudo 将调用用户的名称添加到命令的环境中。

. /home/$SUDO_USER/.config/program

$HOME可能已经和/home/$SUDO_USER一样了,但是有太多方法可以配置sudo让它成为家目标用户的目录。

但是,这会使您的脚本依赖于被 sudo 调用。最好是明确的,并将所需配置的路径作为参数传递给脚本。像

sudo theScript "$HOME/.config/program"

. ""

获取进程的用户

$ ps u -p 2813

去掉它

$ ps u -p 2813 | awk '{print }'
USER
john

或者

$ ps -o user= -p 2813
john

https://unix.stackexchange.com/questions/284934/return-owner-of-process-given-pid/284938 也有类似的问题。接受的答案是使用 ps -o user= -p PIDHERE。所以,在你的情况下,你会做类似的事情:

parents_name=$(ps -o user= -p $PPID)

在这种情况下,我们不需要列 headers,所以我们添加 --no-headers.