假设我想使用exec()和fork()从守护进程(以根运行)生成一个进程,并且我还想在使用seteuid()和setegid()生成进程之前模拟另一个用户。如果我还想继承为特定用户设置的环境变量,那么您建议的最佳方法是什么?是否还有其他方法不调用a/sbin/sh和/或sudo?
想在Linux和MacOSX上做到这一点!
谢谢!
最佳答案
没有“为特定用户设置的环境变量”这样的东西。变量不是存储在某个地方的列表中,而是由登录时运行的程序设置的。你必须运行同样的脚本。因此,只要exec
一个带有-l
(登录shell)的shell,并让它运行(带有-c
)您之前应该传递给exec
的所需命令。
请注意,这可能仍然无法复制整个环境。有些变量(DISPLAY
,例如)通常由以另一种方式运行的程序设置。
要获取最后一个子对象的PID,请确保在与exec
一起传递的命令中使用-c
:
# 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/