已经启动的 PHP 的进程,访问不到启动之后,新设置的环境变量,请问除了杀死进程,重启之外,还有什么解决办法吗?

2022-05-07 16:27:14 +08:00
 xiaoyanbot
举例子,比如:

( 1 )首先当前的系统中不包含 AA 的系统变量,

( 2 )使用 nohup php -S localhost:80 启动的 PHP 进程,当某个 php 的文件中存在比如 getenv('AA') 和 getenv('AA',true)均获取不到 AA 的值。

( 3 )此时在 shell 里,执行 export AA=haha 的时候,新启动的 php 进程可以通过 getenv 访问到这个 AA 的值,

但是前面第(2)步,已经启动的这个 php 进程,访问网页形式依然获取不到 新设置的 AA 的值,

请问 除了杀死( 2 )中的进程,重启之外,还有什么办法可以让( 2 )的进程访问到 AA 的值吗?
855 次点击
所在节点    问与答
8 条回复
heyjei
2022-05-07 16:32:03 +08:00
https://stackoverflow.com/questions/205064/is-there-a-way-to-change-the-environment-variables-of-another-process-in-unix

(gdb) attach process_id

(gdb) call putenv ("env_var_name=env_var_value")

(gdb) detach
weegc
2022-05-07 16:57:43 +08:00
AA 的值不要缓存, 每次读取都是最新的环境变量值, 就不用重启进程
有利有弊
xiaoyanbot
2022-05-07 17:01:55 +08:00
了解了
xiaoyanbot
2022-05-07 17:02:21 +08:00
@weegc 请问怎么每次读取最新的值?
ysc3839
2022-05-07 17:03:58 +08:00
用 IPC 之类的方法把新值传递给已经启动的进程。
不过我怀疑这是个 X-Y Problem https://coolshell.cn/articles/10804.html 建议直接说原始需求。
reneiw
2022-05-07 17:22:57 +08:00
环境变量在你命令行启动的一瞬间就会获取的,建议丢 redis 去取
keepeye
2022-05-07 17:25:37 +08:00
干脆你就别用环境变量了吧,单独弄个 ini 文件,每次获取的时候对比文件修改时间,有更新就重新读取
weegc
2022-05-07 18:07:40 +08:00
@xiaoyanbot getenv('AA') 不行吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/851407

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX