从c ++中获取shell环境变量

时间:2014-10-02 13:04:24

标签: c++ linux macos

假设我想使用exec()和fork()从守护进程(以root身份运行)生成进程,并且我还想在使用seteuid()和setegid()生成进程之前模拟其他用户。如果我还想继承为该特定用户设置的环境变量,那么建议您这样做的最佳方法是什么?还有另一种不调用/ sbin / sh和/或sudo的方式吗?

想在Linux和Mac OS X上做到这一点!

谢谢!

1 个答案:

答案 0 :(得分:2)

没有为“特定用户设置环境变量”这样的事情。变量不存储在某个列表中,它们由登录时运行的程序设置。您必须运行相同的脚本。所以只需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