2016-05-26 37 views
0

背景功能可以说我有一个程序,它看起来像这样通知有关变量的变化

out="Hi" 

printing(){ 
    while true 
    do 
     echo "$out" 
     sleep 1s 
    done 
} 

printing & 
sleep 5s 
out="Changed" 

所以打印功能在后台运行,我知道它不能看到那些在外面所做的更改。我想知道什么是一种有效的方式来告诉功能已经被破坏。我知道你可以用tmp文件来做,但它会变慢。而且我不确定后台函数的行为与在子shell中运行的正常行为是否相同?我将如何更改我的代码?

回答

0

您可以使用Linux共享内存来存储您的全局变量有:

echo "True" > /dev/shm/state # will store value "True" in `state` variable in shared memory 

cat /dev/shm/state # will read value from `state` variable 

所以只要你out变量存储在/dev/shm使其可见的任何子进程

+0

非常感谢的只是一个简单的问题我说得对,这比使用一个文件要快,而且比在程序中直接访问文件要慢一些。 – TenebrisNocte

+0

@TenebrisNocte在访问RAM时速度应该很快。我想它可能比存储本地脚本变量慢,因为你需要调用'echo'和'cat'来放置/获取值 – Samuel

+0

谢谢你最后一件事情,你可以用fifo管道来达到类似的效果,并通过只是价值? – TenebrisNocte