Я использую Qt5.6, у меня есть код, который перезапустит приложение, но я также хочу ограничить количество экземпляров.
Работает код, который ограничивает экземпляры, и код, который перезапускает приложение, но при включенном ограничивающем коде приложение не перезапускается, оно закрывается, но я предполагаю, что перезапуск блокируется, потому что во время попытки для запуска нового экземпляра PID оригинала не очищен.
Вопрос в том, как добиться результата закрытия приложения, ограничивая общее количество экземпляров 1?
Если это не будет решено к завтрашнему дню, я выложу код для перезапуска и ограничения экземпляров, у меня его сейчас нет со мной.
Код для перезапуска приложения:
qApp->quit();
QProcess::startDetached(qApp->arguments()[0], qApp->arguments());
Это просто подсказки для сторожевого скрипта:
1 — вам нужно использовать QProcess :: startDetached для запуска скрипта перед выходом из приложения. Это позволит процессу сценария жить после выхода из приложения.
QProcess::startDetached( "bash", QStringList() << "-c" << terminalCommand );
2 — вам нужно передать текущий PID приложения в ваш сторожевой скрипт через terminalCommand
получить текущий идентификатор приложения в Qt
qApp->applicationPid();
3- в вашем сторожевом скрипте есть бесконечный цикл, который проверяет PID, выполняя
ps aux | grep -v 'grep' | grep $PID
как только PID умирает, снова запустите ваше приложение из скрипта сторожевого таймера
Других решений пока нет …