假设我想使用 exec() 和 fork() 从守护进程(以 root 身份运行)生成一个进程,并且我还想在使用 seteuid() 和 setegid() 生成进程之前模拟另一个用户.如果我还想继承为该特定用户设置的环境变量,您建议这样做的最佳方法是什么?还有另一种不调用/sbin/sh 和/或 sudo 的方法吗?
想在 Linux 和 Mac OS X 上这样做!
谢谢!
最佳答案
没有“为特定用户设置的环境变量”这样的东西。变量未存储在某处的列表中,它们由登录时运行的程序设置。您将必须运行相同的脚本。所以只需 exec
一个带有 -l
的 shell(登录 shell)并让它运行(使用 -c
)您将传递给的所需命令exec
之前。
请注意,这可能仍然无法复制整个环境。一些变量(例如 DISPLAY
)通常由以另一种方式运行的程序设置。
要获取最终 child 的 PID,请确保在通过 -c
传递的命令中使用 exec
:
# sh -l -c "exec sleep 50" &
[1] 30331
# ps -a
PID TTY TIME CMD
30331 pts/1 00:00:00 sleep
关于c++ - 从 C++ 获取 shell 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26161494/