我想确保用户不能运行我的应用程序的多个实例.我的伪代码看起来像这样:
sem_t one_instance_only=sem_open(UNIQUE_NAME,O_CREAT | O_EXCL,...);
if(SEM_FAILED==one_instance_only)
{
if(E_EXIST==errno)
{
// application already running
exit(1);
}
}
sem_close(...);
//without the call to sem_unlink() the semaphore still lingering even if app not
// running
sem_unlink(...);
Run Code Online (Sandbox Code Playgroud)
我尝试了它并且它可以工作,但我只是想确保我做得对,而且没有任何东西可以抓住.
小智 2
您实际上并没有使用任何信号量功能。您可以使用常规文件获得相同的效果,使用 O_CREAT|O_EXCL 打开并在退出时取消链接。
您可以使用相同的文件在其中写入您的 PID(“pidfile”),然后如果打开失败,则读取 PID 并使用它来检查它是否属于您程序的另一个实例,或者它只是在那里,因为它没有由于未链接而取消链接导致崩溃。