假设我想使用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/

10-11 22:49
查看更多