10

我有一些通过命名管道相互通信的进程。目前,我正在本地创建所有管道,并将应用程序保存在同一个工作目录中。在某些时候,假设这些程序可以(并且将会)从不同的目录运行。我需要在已知位置创建我正在使用的这些管道,以便所有不同的应用程序都能够找到他们需要的管道。

我是在 Linux 上工作的新手,不熟悉文件系统结构。在 Windows 中,我会使用 AppData 文件夹之类的东西来保存这些管道。我不确定Linux中的等价物是什么。

/tmp目录看起来可能可以很好地运行。我在一些地方读到它在系统关闭时被清除(这很好,当我开始备份时我可能没有重新创建管道。)但我看到其他一些人说他们正在丢失文件当系统启动时,就好像它被定期清理一样,我不想在我的应用程序使用这些管道时发生这种情况!

有没有更适合特定应用商店的地方?或者/tmp是我想要保留这些的地方(因为它们毕竟是临时的。)?

4

2 回答 2

9

我见过 SaltStack 使用/var/run. 唯一的问题是您需要 root 访问权限才能写入该目录,但假设您要将进程作为系统守护程序运行。SaltStack/var/run/salt在安装时创建并将所有者更改为,salt以便以后可以在没有 root 权限的情况下使用它。

我还检查了文件系统层次结构标准,尽管它并不是那么重要,即使他们说:

维护瞬态 UNIX 域套接字的系统程序必须将它们放在此目录中。

由于命名管道非常相似,我会走同样的路。

于 2013-09-07T19:37:11.693 回答
5

在带有 systemd 的较新 Linux 发行版上(如果它不存在,则在登录期间/run/user/<userid>pam_systemd/var/run创建)可用于打开套接字并将 .pid 文件放在那里,而不是只有 root 可以访问。另请注意,它/var/run是一个符号链接,/run因此/var/run/user/<userid>也可以使用。有关更多信息,请查看此线程。这个想法是系统守护进程应该/var/run/<daemon name>/在安装期间创建一个具有适当权限的目录,并将其套接字/pid 文件放在那里,而用户运行的守护进程(例如 pulseaudio)应该使用/run/user/<userid>/. 另一种选择是/tmp/var/tmp

于 2015-12-21T09:13:06.910 回答