从 C++ 中获取 shell 环境变量
Posted
技术标签:
【中文标题】从 C++ 中获取 shell 环境变量【英文标题】:sourcing shell environmental variables from c++ 【发布时间】:2014-10-02 13:04:23 【问题描述】:假设我想使用 exec() 和 fork() 从守护进程(以 root 身份运行)生成一个进程,并且我还想在使用 seteuid() 和 setegid() 生成进程之前模拟不同的用户.如果我还想继承为该特定用户设置的环境变量,您建议这样做的最佳方式是什么?还有另一种不调用 /sbin/sh 和/或 sudo 的方法吗?
希望在 Linux 和 Mac OS X 上这样做!
谢谢!
【问题讨论】:
相关:***.com/questions/17929414/… 我知道 setenv 的存在,我的意思是获取 .bash_profile 或任何默认用户 shell 中已有内容的最佳方式是什么 【参考方案1】:没有“为特定用户设置环境变量”之类的东西。变量没有存储在某个列表中,它们是由登录时运行的程序设置的。您将不得不运行相同的脚本。所以只需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
【讨论】:
并从用户配置文件中获取默认 shell(getpwnam
或 getpwuid
)
这样,我不知道我用 shell 生成的进程的 PID,所以我无法控制它,我需要设置一个进程检测来获取子 PID .让 shell 产生“设置”并使用 setenv 转储和重置变量可能是一个不错的选择?以上是关于从 C++ 中获取 shell 环境变量的主要内容,如果未能解决你的问题,请参考以下文章
[C++] 系统环境变量和用户变量同名 如何才能获取系统环境变量