-1

如何从所有进程可见的进程中设置环境变量?我将 C 与 Glib 一起使用。

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

4

3 回答 3

4

这根本不可能。

设置环境变量(或更改当前环境)仅对当前进程的子(和后代)进程可见。

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

您可能会玩一些肮脏的把戏,例如在其中添加线条$HOME/.bashrc等。但您不应该这样做。

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

你编辑了你的问题来解释

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

但是您绝对不需要为此更改环境变量。

你可以

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

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

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

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

  5. 做许多其他技巧。

于 2012-11-01T17:03:37.467 回答
1

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

于 2012-11-01T17:03:54.290 回答
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

这完全取决于您想要的协调水平。文件锁足以让一个进程在我工作的时候离开。信号量和共享内存将允许您协调访问。

于 2012-11-01T18:18:14.090 回答