2013-04-23 2 views
0

У меня есть приложение, которое имеет несколько процессов, включая процесс аутентификации. Мне нужно предотвратить запуск аутентификации, если соединение было установлено и аутентификация прошла успешно. Как я могу реализовать это поведение? Платформа - linux.как предотвратить запуск процесса, если он был запущен раньше?

ответ

0

Вы можете использовать общие семафоры и небольшую общую память. Назовем семафор 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); 
0

Вы можете просто проверить свой процесс в том же запущенном приложении. Существуют мощные библиотеки, которые позволяют вам выполнять расширенную проверку, блокировку ресурсов и многое другое ... в зависимости от используемого вами языка.

Самое легкое решение состоит в создании файла блокировки (например, в/tmp), который указывает, что программа запущена, и проверки наличия такого файла в начале вашей программы. Недостатки этого метода в том, что вы должны быть уверены, что файл блокировки будет удален, даже если приложение будет аварийно завершено.

Смежные вопросы