在Perl中,我需要读取其他进程的环境.
>脚本正在以root身份运行
特权.
>脚本将会
在Linux和Solaris中运行.
>我想要一个大多数平台无关的解决方案,至少在Linux和Solaris之间.在Linux中,检查/ env /< proc_id> / environ可以得到我的答案.
>我想避免分叉.我已经有一个解决方案,“/usr/ucb / ps -auxwwwe $pid”
有任何想法吗?
解决方法
对于Solaris,您可以尝试使用
procfs module from CPAN.即使这个模块仍然很年轻,这个引用听起来很有希望:
Brian Farrell sent a very useful patch which handles
inspection of argv and environment of processes
other than the currently running process.
我想象这可能只是最初的环境(就像linux下的environ文件),但这似乎是你想要的?
否则,虽然我看到你说你不想分叉,但一个简单的解决方案可能会是曲柄〜20行的C,以产生一个小程序,只是在Solaris环境中排除了与Linux环境文件完全相同的环境.我已经有了非常相似的东西.如果你有兴趣,我可以发表.
编辑(读取OpenSolaris pargs.c之后):环境变化时,在Solaris下重新分配环境缓冲区,因此psinfo指针可能无效.对于防弹解决方案,您需要追踪_environ.这可能比你需要的更麻烦… pargs -e< pid>可能是对UCB ps(1)更好的替代,如果你做叉路线,但是.