如何使进程知道同一程序的其他进程

lve*_*lla 10 c c++ linux ipc

我必须编写一个程序,必须知道在该机器上运行的另一个自身实例,并与之通信,然后死掉.我想知道在Linux中是否有一种规范的方法.

我首先想到的是每一个程序执行时间编写包含进程的PID somewere一个文件,并查看该文件,但如果是该文件的"正确"的地方,叫什么名字?是否有更好或更"正确"的方式?

然后我必须沟通,说用户试图运行它,但由于还有另一个实例,它将移交作业并退出.我想过只发送一个信号,比如SIGUSR1,但这不允许我发送更多信息,比如用户执行第二个进程的X11显示.如何发送此信息?

该程序与Gtk链接,因此使用glib的解决方案是可以的.

Fre*_*Foo 10

将pid放在文件中是实现此目的的常用方法.对于守护进程("系统程序"),放置这样一个文件的常见位置是/var/run/PROGRAM.pid.对于用户程序,把隐藏在用户的主目录的PID文件(如果该方案也有配置文件,然后把两个配置文件和PID文件中的家目录的子目录).

使用Unix域套接字(也称为本地套接字)最常将信息发送到"主"实例.使用套接字,您将不需要pid文件(如果没有人监听套接字,则进程知道它是主服务器).

  • 仅pid文件几乎没用.如果应用程序崩溃,则可能无法删除其pid文件,因此必须手动删除它.更好的选择是锁定pid文件,因为当进程以某种方式终止时,操作系统总是释放锁.通过执行`ls -la`你无法看到那个锁.单独使用unix域套接字就足够了. (3认同)

Ign*_*ams 9

Unix域套接字.让第一个实例在临时目录中创建一个,然后让其他实例通过它与之通信.

  • 可能不是临时目录 - /var/run对于套接字文件很常见. (2认同)

Dan*_*per 5

编写PID文件是一种常见的方法.检查pidfile(3)图书馆.