流程开始限制

时间:2010-10-09 09:44:06

标签: c++ process

我创建了一个使用C ++并生成可执行文件的简单应用程序。

我想确保该过程无法启动两次。如何强制执行流程/服务只需启动一次?

感谢。

2 个答案:

答案 0 :(得分:2)

什么操作系统?在Windows上,执行此操作的典型方法是创建一个名为Mutex,因为如果某个其他进程已经创建了具有该名称的互斥锁,操作系统将为您提供ERROR_ALREADY_EXISTS,操作系统将确保互斥锁已发布当过程结束时(即使它崩溃或被杀死)。

答案 1 :(得分:1)

写一个临时文件并将其用作锁。

编辑:回答评论:如果你在Unix系统上,写一个文件/ tmp / my_application_lock_file。如果它已经存在,请使用适当的消息停止您的程序。退出文件的创建者后,将其删除。

#include <sys/stat.h>
#include <errno.h>
#include <unistd.h>
#include <iostream>
#include <fstream>

int main (void)
{
    struct stat file_info;
    // test for lock file
    if (stat("/tmp/my_application_lock", &file_info) == 0) {
        std::cout << "My application is already running, will abort now..." << std::endl;
        return -1;
    } else {
        // create lock file
        std::ofstream out;
        out.open("/tmp/my_application_lock");
        if (!out) {
            std::cout << "Could not create lock file!" << std::endl;
            return -1;
        }
        out << "locked" << std::endl;
        out.close();
        // do some work
        std::string s;
        std::cin >> s;
        // remove lock file
        errno = 0;
        if (unlink("/tmp/my_application_lock"))
            std::cout << "Error: " << strerror(errno) << std::endl;
    }
    return 0;
}