Обнаружение экземпляров процесса в Mac OS X - PullRequest
2 голосов
/ 11 января 2012

Я пытаюсь реализовать способ определения того, был ли запущен другой экземпляр приложения и был ли он связан с: 1. Совместно используемой памятью 2. Именованными мьютексами 3. Именованными каналами

Кажется всеиз них есть недостаток, заключающийся в том, что в случае сбоя «основного» приложения объект «IPC» останется висеть, в результате чего все будущие экземпляры приложения будут думать, что существует другой активный экземпляр (до перезагрузки).В идеале я хотел бы иметь объект, который автоматически удаляется при завершении процесса, как обычно, так и в результате сбоя.

Идеи?

1 Ответ

1 голос
/ 11 января 2012

Я видел, как это делается с помощью блокировки файлов и файлов. Основное приложение проверяет наличие файла в / tmp. Если файл в данный момент заблокирован, значит приложение уже запущено. Если файл не существует или не заблокирован, значит, он не запущен. В зависимости от операционной системы вам нужно делать это атомарно, чтобы избежать гонки.

Таким образом, в случае сбоя программы файл автоматически закрывается ОС.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...