2016-05-26 1 views
0

Допустит, у меня есть программа, которая выглядит следующим образомInform фоновой функции о переменных изменениях

out="Hi" 

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

printing & 
sleep 5s 
out="Changed" 

Так функция печати работает в фоновом режиме, и я знаю, что он не может видеть изменения, которые сделаны на внешней стороне. Я хотел бы знать, что является эффективным способом сказать, что что-то совершило. Я знаю, что вы можете делать это с tmp-файлами, но он должен замедляться. И я не совсем уверен, что фоновые функции ведут себя так же, как обычные, запущенные в подоболочке? Как мне изменить свой код?

ответ

0

Вы можете использовать Линукс разделяемой памяти для хранения глобальных переменных есть:

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 Должно быть быстрым, когда вы обращаетесь к ОЗУ. Я предполагаю, что это может быть медленнее, чем хранить в локальных переменных скрипта, поскольку вам нужно называть 'echo' и' cat', чтобы поставить/получить значение – Samuel

+0

. Благодарю вас только за последнее, что вы могли бы добиться чего-то подобного с помощью фиолетового канала и отправить через просто значение? – TenebrisNocte

Смежные вопросы