Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从所有进程都可见的进程中设置环境变量_C_Unix_Environment Variables_Glib - Fatal编程技术网

C 从所有进程都可见的进程中设置环境变量

C 从所有进程都可见的进程中设置环境变量,c,unix,environment-variables,glib,C,Unix,Environment Variables,Glib,如何从所有进程都可见的进程中设置环境变量? 我在用C和Glib 我有10个进程使用同一个库。问题是,在该库中执行了一个检查过程(这是CPU不足的)。我希望避免为每个进程执行库检查过程。对于使用库的第一个进程,这就足够了。这根本不可能 设置环境变量(或更改当前环境)仅在当前进程的子进程(和子进程)中可见 其他进程,特别是父进程(通常是在启动程序的终端中运行的shell)不受影响 您可能会玩一些肮脏的把戏,例如在$HOME/.bashrc中添加行,但您不应该这样做 您只需记录哪些环境变量是相关的。用

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


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

这根本不可能

设置环境变量(或更改当前环境)仅在当前进程的子进程(和子进程)中可见

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

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

您只需记录哪些环境变量是相关的。用户负责设置环境变量(可能通过手动编辑其
$HOME/.bashrc
等)。将这种自由留给用户。向他解释怎么做以及为什么

你编辑了你的问题来解释这一点

我有10个进程使用同一个库。问题是,在该库中执行了一个检查过程(这是CPU不足的)。我希望避免为每个进程执行库检查过程

但您肯定不需要为此更改环境变量

你可以

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

  • 确定为检查指定了特定的文件名,并使用“文件锁定写入”写入该文件,然后使用“文件锁定读取”再次读取该文件

  • 让检查人员将其结果写入一些事先已知的文件中,并在决定是否进行昂贵的检查之前读取该文件

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

  • 做很多其他的把戏


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

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

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


    这完全取决于你想要的协调程度。文件锁对于一个进程来说已经足够好了,可以在我工作的时候说“待在外面”。信号量和共享内存将允许您协调访问。

    为什么要问???你到底想达到什么目的?这里肯定需要澄清一下。是否希望任意进程看到此变量;从该进程派生的子进程;您编写的进程在您的id下运行,但从不同的shell启动;什么样的IPC?我需要减少CPU使用。我的进程从启动时开始,重复操作需要220毫秒。我只想做一次,让其他进程知道检查过程已经完成。只需写一个文件,例如在
    /run
    /var/run
    中,告诉他们检查已经完成。然后启动其他进程,让每个进程检查该文件,或者简单地说,通过给其他进程一个额外的程序参数来启动其他进程以避免检查。