Разрешить только один запущенный экземпляр программы
Как я могу ограничить мою программу для запуска только экземпляра? В настоящее время я запускаю свою программу как демон (запускается и останавливается автоматически), и когда пользователь щелкает и пытается запустить снова (что не является допустимым вариантом использования), процесс запускается в контексте пользователя, и я хотел бы избежать этого по многим причинам,
Как я могу достичь этого?
На данный момент я получаю список процессов и делаю некоторые проверки и завершаю работу в самом начале, но этот метод не является чистым, хотя он решает мою проблему.
может кто-нибудь дать мне лучшее решение? И я использую PS, чтобы получить список процессов, есть ли надежный API для этого?
1 ответ
Используйте именованный семафор со счетчиком 1. При запуске проверьте, не занят ли этот семафор. Если это так, выходите. Иначе возьми.
Доказательство концептуального кода: (положить где-то рядом с точкой входа приложения)
#include <semaphore.h>
...
if (sem_open(<UUID string for my app>, O_CREAT, 600, 1) == SEM_FAILED) {
exit(0);
}
Из документации по sem_open,
Возвращенный дескриптор семафора доступен вызывающему процессу до тех пор, пока он не будет закрыт с помощью sem_close(), или до тех пор, пока вызывающая программа не выйдет или не выполнит.