从c++中获取shell环境变量
sourcing shell environmental variables from c++
假设我想使用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
相关文章:
- 枚举环境变量的惯用C++14/C++17方法
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 定义C++新的环境变量并在 bat 文件中使用它
- docker 构建失败:无法设置环境变量
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- C++环境变量
- 在编译时为运行时设置环境变量
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 访问 PlatformIO 中的外部环境变量
- WSL 看不到环境变量
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 注册 TBB 的环境变量
- 如何设置Qt应用程序以使用类Unix系统的实际环境变量?
- CMake 看不到SDL2_PATH环境变量 (Windows)
- 跨语言共享环境变量
- 什么是运行英特尔线程构建模块的 XCode 8 环境变量
- 在运行时将更改的环境变量应用于 QApplication
- 在C++程序中找不到环境变量 UID
- Visual Studio 2017 C++,如何定义一个"环境变量"'Additional Library Directory'?
- 从c++中获取shell环境变量