【发布时间】:2015-06-10 17:25:00
【问题描述】:
我正在尝试制作一个 bash 脚本运行的程序。我希望 bash 脚本能够更改 c++ 程序的状态,而我唯一能找到的就是使用环境变量。问题是,它似乎 getenv 只在程序运行时获取值。
重击
export BLINK=1
./blink &
sleep 5s
unset BLINK
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;
}
所以它的作用是运行闪烁程序,等待 5 秒然后取消设置环境。然而,C++ 程序总是将环境值视为 1 并且永远不会停止。如何在程序运行时获取更新的环境变量?或者有没有更好的方法让 bash 脚本控制 c++ 程序的状态。
编辑我应该注意,我也不想直接终止进程,因为它必须在结束时关闭硬件。
【问题讨论】:
-
环境不是这样运作的。生成的进程在启动时会获得其父环境的副本,然后两者不再连接。如果您想与您的应用程序交谈,那么您需要一个通信渠道。信号、管道、套接字、标准输入、程序轮询的控制文件等
-
供参考:由于当前的问题是“我该如何做这件不可能的事情或任何其他事情”,所以我投票结束。对 UNIX IPC 机制的完整调查太大了。请阅读 Etan 提到的内容,弄清楚您需要什么,然后在您有新问题时回来。