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

sourcing shell environmental variables from c++

本文关键字:shell 环境变量 获取 c++      更新时间:2023-10-16

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

我想在Linux和Mac OS X上都这样做!

谢谢!

没有"为特定用户设置环境变量"这样的东西。变量不是存储在某个列表中,而是由登录时运行的程序设置的。您将不得不运行相同的脚本。因此,只需exec一个带有-l(登录shell)的shell,并让它运行(带有-c)之前传递给exec的所需命令。

请注意,这可能仍然无法复制整个环境。一些变量(例如DISPLAY)通常由以另一种方式运行的程序设置。


要获得最后一个子项的PID,请确保在与-c:一起传递的命令中使用exec

# sh -l -c "exec sleep 50" &
[1] 30331
# ps -a
  PID TTY          TIME CMD
30331 pts/1    00:00:00 sleep