2013-04-08 4 views
0

В Windows я решил эту проблему, создав именованный семафор. Если плагин 1 сработает, удерживая семафор, семафор отпущен. Но это не так с Posix (на Mac), где семафор остается живым. Поскольку sigaction не выпустит SIGKILL на семафоре, я должен отказаться от него.Как предотвратить запуск нескольких экземпляров процесса (плагин NPAPI) в Posix?

Какой у меня лучший вариант.

Названные трубы, порты, очередь сообщений, выполнение удаленной функции?

+0

Это звучит немного необычно. Какую проблему вы на самом деле пытаетесь решить здесь? Вам нужно бронировать доступ к одному обычному процессу/устройству/.../что-то? –

+0

Нет, плагин npapi запускает видео, и мы не хотим, чтобы к ним показывались экземпляры проигрывателя. – sgowd

+0

А, так что вы на самом деле не хотите, чтобы плагины не работали, но им нечего делать. Любая потенциальная проблема с основанием этого на коротких тайм-аутах, когда другая берет верх, если временная метка не обновлялась в 'N' ms? –

ответ

0

Я исправил его, используя открытый() вызов, доступный в POSIX. По-видимому, файловые дескрипторы для процесса освобождаются ОС, даже если процесс завершается SIGKILL

Constructor() 
{ 
    m_fd = open(filePath, O_CREAT | O_EXLOCK | O_NONBLOCK); 
    if (m_fd == -1) 
    { 
     throw exception; 
    } 
    ... 
} 

Destructor() 
{ 
    if(m_fd != 0) 
    { 
     close(m_fd); 
    } 
    ... 
} 
Смежные вопросы