У меня есть приложение, которое имеет несколько процессов, включая процесс аутентификации. Мне нужно предотвратить запуск аутентификации, если соединение было установлено и аутентификация прошла успешно. Как я могу реализовать это поведение? Платформа - linux.как предотвратить запуск процесса, если он был запущен раньше?
ответ
Вы можете использовать общие семафоры и небольшую общую память. Назовем семафор mutex
и общую память bool is_authenticated
. mutex
инициализируется значением 1 и is_authenticated
со значением false.
Тогда ваш процесс аутентификации становится:
wait(mutex);
if (!is_authenticated)
authenticate();
is_authenticated = true;
signal(mutex);
Вы бы тогда должны заботиться об истечении срока действия аутентификации. Поэтому, когда сессия завершена:
wait(mutex);
assert(is_authenticated == true); /* if not, you have been compromised */
deauthenticate();
is_authenticated = false;
signal(mutex);
Вы можете просто проверить свой процесс в том же запущенном приложении. Существуют мощные библиотеки, которые позволяют вам выполнять расширенную проверку, блокировку ресурсов и многое другое ... в зависимости от используемого вами языка.
Самое легкое решение состоит в создании файла блокировки (например, в/tmp), который указывает, что программа запущена, и проверки наличия такого файла в начале вашей программы. Недостатки этого метода в том, что вы должны быть уверены, что файл блокировки будет удален, даже если приложение будет аварийно завершено.
- 1. Запретить запуск приложения, если он уже запущен
- 2. Запуск mysql, если он не запущен
- 3. Как отправить аргументы процессу, который был запущен раньше?
- 4. Как я могу отменить scrollTo, если он был запущен?
- 5. Как подождать, пока нить присоединится, только если он был запущен
- 6. Закрытие процесса, который был запущен через поток
- 7. Как процесс может быть запрошен, когда он был запущен?
- 8. Как предотвратить запуск процесса IEDriverServer.exe несколько раз?
- 9. Clojure: Как предотвратить непрерывный запуск процесса?
- 10. Будет ли запуск приложения, если он уже запущен?
- 11. Пакетный файл, запуск следующей программы, если он уже запущен
- 12. mysql не работает, когда он был запущен?
- 13. Проверьте, если процесс запущен, и выход, если он уже запущен
- 14. VB.NET Как сказать, если новый экземпляр класса был закончен раньше?
- 15. Как закончить действие из класса неактивности, где он был запущен
- 16. Метод делегата QLPreviewController не вызывается в iOS 10, но вызывает вызов, если он был запущен раньше, чем iOS 10
- 17. Как предотвратить запуск процессов?
- 18. Перенаправить STDERR/STDOUT процесса ПОСЛЕ того, как он был запущен, используя командную строку?
- 19. Захват STDIN/STDERR/STDOUT процесса ПОСЛЕ того, как он был запущен, используя командную строку?
- 20. Вспоминая, был ли javascript запущен раньше и не запускал его снова, если это было [EnjoyHint.js]
- 21. Запуск нескольких служб Windows, если он был остановлен
- 22. Угловая - предотвратите перезагрузку контроллера, если он уже запущен
- 23. Не запускайте скрипт, если он уже запущен
- 24. Проверьте, запущен ли процесс, если он не запущен
- 25. Почему раньше был фрагмент?
- 26. VCRedist - как я могу узнать, был ли он запущен?
- 27. Как предотвратить выполнение задания crontab, когда он уже запущен
- 28. Какой контроллер был раньше?
- 29. Мониторинг процесса, который уже запущен
- 30. Остановить запуск запущен с Python