C和Linux中仅限一个实例的应用程序

use*_*271 10 c linux

我想确保用户不能运行我的应用程序的多个实例.我的伪代码看起来像这样:

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 并使用它来检查它是否属于您程序的另一个实例,或者它只是在那里,因为它没有由于未链接而取消链接导致崩溃。