从将由所有进程可见的进程设置环境变量

时间:2012-11-01 17:02:00

标签: c unix environment-variables glib

如何从所有进程可见的进程设置环境变量? 我正在使用C和Glib。

我有10个使用相同库的进程。问题是在该库中执行检查过程(CPU饥饿)。我想避免为每个进程执行库检查过程。对于使用该库的第一个进程就足够了。

3 个答案:

答案 0 :(得分:3)

这根本不可能。

只能从当前流程的子(和后代)进程中看到设置环境变量(或更改当前环境)。

其他进程,特别是父进程(通常是在启动程序的终端中运行的shell)不受影响。

你可能会玩肮脏的伎俩,例如将行添加到$HOME/.bashrc等等。但你不应该。

您只需要记录哪些环境变量是相关的。 用户有责任设置环境变量(可能通过手动编辑他的$HOME/.bashrc等等)。为您的用户留下自由。向他解释如何做到这一点以及为什么。

您编辑了问题以解释

  

我有10个使用相同库的进程。问题是在该库中执行检查过程(CPU饥饿)。我想避免为每个进程执行库检查过程。

但你绝对不需要为此改变环境变量。

你可以

  1. 决定并记录未执行检查,除非给出一些特定的环境变量(或某些程序参数)

  2. 决定给予检查特定文件名,并使用文件锁定写入来写入该文件,并使用文件锁定读取再次读取

  3. 让检查将其结果写入一些已知的预先存档文件中,并在确定您要进行昂贵的检查之前阅读该文件

  4. 让一个进程启动所有其他进程,并告知它们有关检查(可能确实设置了一些环境变量或某些程序参数)或使用一些进程间通信技巧与其他进程通信(您可以使用套接字,锁定文件,共享内存等...)

  5. 做其他许多技巧。

答案 1 :(得分:1)

那是不可能的。您只能为子进程设置环境。

答案 2 :(得分:0)

flock()听起来可能是你的朋友。

http://beej.us/guide/bgipc/html/multi/flocking.html

您可能还想查看信号量或SHM(共享内存)。

https://beej.us/guide/bgipc/html/multi/semaphores.html

http://beej.us/guide/bgipc/html/multi/shm.html

这一切都取决于你想要的协调水平。文件锁定足以让一个进程在我工作时说出来。信号量和共享内存将允许您协调访问。

相关问题