Re[30]: Windows захватили инопланетяне?
От: Vetal_ca Канада http://vetal.ca
Дата: 16.01.20 23:51
Оценка: :)
Здравствуйте, blp, Вы писали:

V_>>Сервис + per-user userspace GUI/headless процесс.

blp>Да, тут больше текста, но все равно непонятно. Задача, которую решает юнистек — это много сервисов, каждый из которых per-user-logged-on.
blp>Как ваша адова архитектура с одинм сервисом и потенциально несколькими процессами, в это вписывается? Например, как эти процессы корректно шатдаунить, когда юзер делает log off, чтобы они гарантированно успели деинициализироваться?


Сервис содержит в себе контекст пользователя. При закрытии user space app информируется сервис, далее делается необходимый shutdown на уровне сервиса.

Service (псевдокод):

onLogon(userId)
{
   userContext = createContext(userId)
   onUserLogon(userContext)
}
onLogoff(userId)
{
   userContext = getUserContext(userId)
   onUserLogoff(userContext)
}

onShutdown()
{
   foreach userId in logonUsers
   {
      userContext = getUserContext(userId)
      onUserLogOff(userContext)
   }

   // Деинициализация прошла, разрешаем shutdown

   signalOsShutdownAllowed()
}



Можно и shutdown/startup зависимости добавить с другими, "singleton-kind" сервисами, не вижу в этом проблемы

User-space процессы шатдаунятся стандартным способом (SIGTERM, WM_CLOSE или что-там, без разницы). Что-то критичное, для чего нужно "попридержать" shutdown (buffers flush etc), выполняется в onUserLogOff(userContext), в контексте сервиса.
Отредактировано 16.01.2020 23:53 Vetal_ca . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.