And*_*ett 20
最常见的方法是创建一个PID文件:定义文件的位置(内部/ var/run是常见的).成功启动后,您将PID写入此文件.在决定是否启动时,请读取文件并检查以确保引用的进程不存在(或者如果它存在,则它不是守护进程的实例:在Linux上,您可以查看/proc/$PID/exe).关闭时,您可以删除该文件,但这不是必需的.
有一些脚本可以帮助您完成此任务,您可能会发现start-stop-daemon它很有用:它可以使用PID文件,甚至只是全局检查是否存在可执行文件.它专为此任务而设计,旨在帮助人们做到正确.
如果您有权访问代码(即正在编写):
return 1;如果文件存在,或者,return 1;如果进程名称在列表中如果你没有:
使用boost进程库创建将由进程创建的内存块.如果它已经存在,则意味着该进程的另一个实例.出口.
您需要的更精确的链接就是这个.
#include <boost/interprocess/shared_memory_object.hpp>
#include <boost/scoped_ptr.hpp>
int main()
{
using boost::interprocess;
boost::scoped_ptr<shared_memory_object> createSharedMemoryOrDie;
try
{
createSharedMemoryOrDie.reset(
new shared_memory_object(create_only, "shared_memory", read_write));
} catch(...)
{
// executable is already running
return 1;
}
// do your thing here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8668 次 |
| 最近记录: |