3

Предположим, у меня запущен непрерывный процесс, который читает переменную среды:

export APPLE=abc123
watch echo \$APPLE

Теперь, есть ли способ изменить значение, которое читается во время выполнения? Я пытался приостановить процесс (ctrl - z), экспортировать новое значение для переменной, затем возобновить (fg), но старое значение по-прежнему отображается.

Это возможно? Я бы предпочел ответ, который работает с основными инструментами командной строки и не требует специализированного программного обеспечения, хотя требуются права суперпользователя.

1 ответ1

7

Я пытался приостановить процесс (ctrl - z), экспортировать новое значение для переменной, затем возобновить (fg), но старое значение по-прежнему отображается.

Это не работает, потому что переменные окружения наследуются при запуске процесса - но когда вы используете Ctrl - z и fg он не перезапускает watch ; он просто останавливает и останавливает старый процесс.

Единственный способ изменить среду для запущенного процесса извне - это сделать это внутри процесса с помощью средства отладки. Например:

$ gdb -p $(pidof watch)
(gdb) p setenv("APPLE", "orange")
(gdb) q
Really detach? y

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .