Joe*_*iak 5 c++ linux bash getenv
我正在尝试编写一个 bash 脚本运行的程序。我希望 bash 脚本能够更改 C++ 程序的状态,而我唯一能找到的就是使用环境变量。问题是,似乎 getenv 仅在程序运行时获取值。
重击
export BLINK=1
./blink &
sleep 5s
unset BLINK
Run Code Online (Sandbox Code Playgroud)
C++
int main(int args, char **argv) {
char *blink = getenv("BLINK");
while(blink && blink[0] == '1')
{
std::cout << getenv("BLINK") << std::endl;
usleep(500000);
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
所以它的作用是运行眨眼程序,等待 5 秒钟,然后取消环境设置。然而,C++ 程序始终将环境值视为 1 并且永远不会停止。程序运行时如何获取更新的环境变量?或者有没有更好的方法让 bash 脚本控制 C++ 程序的状态。
编辑我应该注意,我也不想只是终止该进程,因为它必须在结束时关闭硬件。
程序启动后无法修改环境。您必须使用另一种进程间通信方法。最简单的一种是将某些信号的处理程序注册到您的应用程序(例如 SIGUSR1),然后使用kill -SIGUSR1 <pid>命令发送它。
还有其他可用的解决方案,例如创建命名管道(使用pipeshell 命令),并定期检查是否有人向其写入内容。如果是,则退出循环。
如果需要,您也可以使用套接字,但这可能会更复杂。