【问题标题】:Poll environment file for changes轮询环境文件以进行更改
【发布时间】:2021-05-23 01:18:23
【问题描述】:

我希望我的 FUSE fs 测试要在使用 fs 的进程环境中设置的变量,例如 FUSE_FS_SHOW_DOTFILES 用于不隐藏文件/目录。默认行为是隐藏这些。 我怎样才能有效地做到这一点?使用 fs 的进程的 pid 是已知的,因此可以解析 /proc/$pid/environ 中的环境文件。 但是要做到这一点,像lookup、getattr、opendir 和readdir 这样的每个命令都是非常低效的。您无法查看此文件的修改/更改时间,因为它们始终设置为当前系统时间(顺便说一下)。 有人有想法吗?

提前致谢,

史蒂夫·邦

荷兰

【问题讨论】:

  • 时间不是真实的,因为 proc fs like fuse 是虚拟的。那里没有真正的文件。您是否控制用户所做的变量设置?你可以在你的保险丝中实现它
  • 嗨奥伦希洪。你写我可以在我的保险丝中实现它,你的意思是用户完成的变量设置。你的意思是?我的服务无法控制用户在其环境中设置的内容。
  • 如果你可以控制用户,他们可以不用设置 env,而是在你的 fuse mount 中写入类似目录树的“/proc”,暴露为配置界面
  • 好的,您的建议是根目录或 .config 文件(隐藏)上的 getxattr/setxattr。是奥伦吗?在那种情况下,是的,这是很有可能的。
  • 是的。在特定文件上设置 xattr/getxattr 或读/写 (echo/cat) 不同的配置路径以模仿 /proc fs

标签: linux environment-variables polling fuse


【解决方案1】:

读取 /proc/$pid/environ 无济于事,因为它仅反映内核创建进程时的环境。进程对环境的任何后续更改都不会反映在该文件中。没有切实可行的方法来执行您的建议,更不用说有效地执行了。这听起来像XY Problem

【讨论】:

  • 呃,我不知道那个 Kurtis。当用户设置变量(和导出)时,变量会去哪里?我不知道任何位置。
  • 在 UNIX 系统上,初始环境变量集由内核放入堆栈。当程序修改其环境变量时,它会将它们移动到内核无法访问的堆中。我已经掩盖了一些细节,但这就是发生的事情的要点以及为什么内核在进程开始运行后无法看到任何 env var 更改。
  • 感谢 Kurtis 分享这个。我不知道这个。它非常特殊且不直观。
猜你喜欢
  • 1970-01-01
  • 2018-08-11
  • 2015-07-31
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多