我可以更改正在运行的进程的本地环境变量吗?

Cod*_*rer 3 linux environment-variables

假设我有一个持续运行的进程读取环境变量:

export APPLE=abc123
watch echo \$APPLE
Run Code Online (Sandbox Code Playgroud)

现在,有什么方法可以更改执行期间正在读取的值?我试过暂停进程 ( ctrl- z),为变量导出一个新值,然后恢复 ( fg),但仍然显示旧值。

这可能吗?我更喜欢使用基本命令行工具并且不需要专门软件的答案,尽管需要 root 权限是可以的。

use*_*686 7

我试过暂停进程 ( ctrl- z),为变量导出一个新值,然后恢复 ( fg),但仍然显示旧值。

这不起作用,因为在进程启动时继承环境变量——但是当你使用时Ctrl——z并且fg它不会重新启动watch;它只是暂停和取消暂停旧进程。

从外部更改正在运行的进程的环境的唯一方法是使用调试工具从进程内部进行。例如:

$ gdb -p $(pidof watch)
(gdb) p setenv("APPLE", "orange")
(gdb) q
Really detach? y
Run Code Online (Sandbox Code Playgroud)