c++ - 从 C++ 获取 shell 环境变量

标签 c++ linux macos

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

相关文章:

c++ - 如何检索整个 va_list 输入

c++ - 生成组合虚拟按键以获取 â、ó、ć 等更复杂的字符

c++ - 从 C 代码调用具有复杂参数和复杂返回类型的 C++ 函数

c++ - 将 `std::swap` 应用于这些对象时会做什么?

c++ - 在 OpenGl 中混合 GL_ALWAYS 和 GL_LESS

c++ - 为什么我的 C++/Win32 项目无法在 Visual Studio 之外工作?

linux - Cron 表达式在不同月份的不同日期运行

linux - 为什么ELF程序头有两个LOAD入口,而程序布局三段

macos - 在 Mac OS X 窗口中显示自定义视频(RGB 位图数据)

macos - 使用 SWIFT 编写 OSX 内核扩展?