如何获取父进程的用户?
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
.
我正在编写一个程序,它使用自己的配置文件(在 /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
.