我创建了一个使用C ++并生成可执行文件的简单应用程序。
我想确保该过程无法启动两次。如何强制执行流程/服务只需启动一次?
感谢。
答案 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;
}