c - 如何检测我是否是第一个实例或向同一应用程序的前一个实例发送 IPC 消息?

标签 c linux

我的应用程序应该长期运行(通常是空闲)。如果我尝试打开第二个应用程序(或通过全局热键触发应用程序),我希望现有实例能够接收某种 IPC 消息并将其自身带到前面。我如何在 Linux 上执行此操作?我遇到的问题是,如果我持有全局锁,当实例关闭时,它不会自动释放(通常我会解锁它,但应用程序可能会崩溃)。如果我尝试使用 mkfifo,我不知道我是否是第一个实例,我能想到的每个解决方案似乎都需要大量代码,通常这对我来说是一个迹象,我可能做错了什么

最佳答案

有很多IPC原语,都可以使用。

一个简单的方法是使用命名管道:如果管道不存在,则程序将创建它并照常启动。然后,它定期轮询管道以查看管道上是否可以接收到某些内容,在这种情况下,程序会接收它(并丢弃它)并将自己置于“前面”。

另一方面,如果命名管道存在,则程序通过它发送一条简单的虚拟消息,然后退出。

关于c - 如何检测我是否是第一个实例或向同一应用程序的前一个实例发送 IPC 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69392757/

相关文章:

linux - 如何在/usr 目录中找到最长的头文件(.h)

python - 在 python 3 中导入 Tornado 时出错

c - 通过递归函数打印链表的节点

c - 单元测试 C 库,内存管理

c - 在输出文件中显示客户端的IP地址?

linux - 为什么 ELF 部分之间有未使用的空白空间?

linux - 指定文件名时 AWK 出错

c - 打印结果时出现未知符号

c - 通过二维数组中对角线元素的总和验证八皇后解

c++ - 赋值操作困惑