Ограничение запуска процесса - PullRequest
0 голосов
/ 09 октября 2010

У меня есть простое приложение, которое использует C ++ и создает исполняемый файл.

Я хотел бы убедиться, что процесс не может быть запущен дважды. Как заставить процесс / сервис запускаться только один раз?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 октября 2010

Какая операционная система? В Windows типичным способом сделать это является создание именованного Mutex, потому что ОС даст вам ERROR_ALREADY_EXISTS, если какой-то другой процесс уже создал мьютекс с этим именем, и ОС обеспечит освобождение мьютекса, когда процесс завершается (даже если он аварийно завершается или уничтожается).

1 голос
/ 09 октября 2010

Написать временный файл и использовать его как блокировку.

Редактировать: Чтобы ответить на комментарий: Если вы работаете в системе 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...