![我可以更改正在运行的进程的本地环境变量吗?](https://linux22.com/image/1334880/%E6%88%91%E5%8F%AF%E4%BB%A5%E6%9B%B4%E6%94%B9%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%9C%AC%E5%9C%B0%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F%E5%90%97%EF%BC%9F.png)
假设我有一个正在运行的读取环境变量的连续进程:
export APPLE=abc123
watch echo \$APPLE
现在,有什么方法可以更改执行期间读取的值吗?我尝试过暂停进程 ( ctrl- z),为变量导出新值,然后恢复 ( fg
),但仍然显示旧值。
这可能吗?我更希望答案可以使用基本的命令行工具并且不需要专门的软件,尽管需要 root 权限也可以。
答案1
我尝试过暂停该进程(ctrl- z),为变量导出一个新值,然后恢复(
fg
),但仍然显示旧值。
这不起作用,因为环境变量在进程启动时继承– 但是当您使用Ctrl-z时fg
它不会重新启动watch
;它只是暂停并取消暂停旧进程。
从外部改变正在运行的进程的环境的唯一方法是从流程内部使用调试工具。例如:
$ gdb -p $(pidof watch)
(gdb) p setenv("APPLE", "orange")
(gdb) q
Really detach? y