在Perl中,我需要阅读其他进程的环境。

  • 脚本以root身份运行
    特权。
  • 该脚本将是
    在Linux和Solaris上均可运行。
  • 我想要一个与平台无关的解决方案,至少在Linux和Solaris之间。在Linux中,检查/env//environ可以给我答案。
  • 我想避免不得不 fork 。我已经有一个解决方案,可以派生“/usr/ucb/ps -auxwwwe $ pid”

  • 有任何想法吗?

    最佳答案

    对于Solaris,您可以尝试procfs module from CPAN。即使这个模块看起来还很年轻,这个引用听起来还是很有希望的:



    我想这可能只是初始环境(就像Linux下的environ文件一样),但这似乎就是您想要的?

    否则,尽管我看到您说您不想 fork ,但是一个简单的解决方案可能是启动大约20行C来生成一个小的程序,该程序只是在Solaris上吐出与Linux environ文件完全相同的环境。我已经在C中有非常相似的东西。如果您有兴趣,我可以发布。

    编辑(在阅读OpenSolaris pargs.c之后):当环境更改时,环境缓冲区在Solaris下重新分配,因此psinfo指针可能无效。对于防弹解决方案,您需要查找_environ。不过,这可能比您需要的麻烦更多。但是,如果您确实走了岔路,pargs -e <pid>可能是UCB ps(1)的更好替代品。

    10-07 19:49
    查看更多