Изменение переменных в разветвленном процессе извне этой вилки?

Теоретически с этим блоком вы должны видеть только «бег …» один раз (или меньше), но на практике он повторяется до тех пор, пока он не будет убит вручную. Как изменить значение x внутри forked-процесса на false из-за разветвленного процесса после того, как была вызвана функция «start»?

export x=true start() { while [ $x == true ]; do echo running... sleep 1 done } start & x=false 

2 Solutions collect form web for “Изменение переменных в разветвленном процессе извне этой вилки?”

Простое решение здесь использовать какую-то межпроцессную связь, чтобы сообщить целевому процессу внести изменения. Например, вы можете использовать сигналы:

 #!/bin/sh export x=true start() { trap x=false USR1 while [ $x = "true" ]; do echo running... sleep 1 done } start & sleep 5 kill -USR1 $! wait 

производит этот вывод:

 $ ./testit.sh running... running... running... running... running... $ 

Если вы используете ksh93 , вы можете использовать функции дисциплины для реализации общих переменных (см. https://stackoverflow.com/questions/13726293/environment-variables-to-be-used-across-multiple-korn-ksh93-shell-scripts -get )

Кроме того, вы можете использовать fish которая реализует эту функцию через демона: fishd .

  • как создать отдельный процесс в фоновом режиме при запуске переднего плана
  • Разверните вывод двух команд `awk`
  • Помогите прочитать плоский файл в unix и вывести на упрощенный формат csv для импорта в excel
  • Синтаксическая ошибка Bash, когда «else» следует за пустой категорией «then»
  • Почему sendmail работает по-разному в разных оболочках?
  • Почему убийство процесса печатается в консоли
  • «Rm. *» Когда-либо удаляет родительский каталог?
  • Как удалить 2 месяца назад файлы в unix
  • Как я могу очистить терминал другими командами?
  • exec с переменной filedescriptor
  • Сценарий для просмотра папки для новых файлов?
  • Linux и Unix - лучшая ОС в мире.