我在客户端 - 服务器模型中使用共享内存。 当我的服务器通过使用sigkill而不是sigterm/sigint被用户杀死时,我无法做任何事情(按照预期),但是我的共享内存对象和信号仍然存在于/ dev/shm /中。如何在使用共享内存时处理杀死(kill -9)?
下一次我开始我的服务器时,我想创建一个完全相同名称的新对象,并且 - 以满足方式 - 失败并退出我的程序。
用户需要自行删除对象 - 这当然不是最好的选择。
我该如何处理?
我可以直接调用shm_open()而不用O_EXCL标志,最终破坏这个标志的用途。因为也许我的服务器已经有一个实例在运行并使用这个对象。
Pulseaudio似乎使用数字组合来保持其对象不同,并且不会因使用-9而将其杀死,所以似乎有一种方法。
难道你没有其他方法来识别已经运行的服务器进程吗?一个pid文件,也许? – moooeeeep
@moooeeeep这就是为什么我问如何处理它 - 似乎是一个好的开始,但我应该在哪里找到这样的文件? – Haini