Получать уведомления, если процесс умирает в QNX

У меня есть два процесса. 1) сервер и 2) клиент. Условием запуска клиента является то, что серверный процесс должен быть запущен. Я могу сделать это, чтобы проверить, как я отслеживаю вывод команды pidin. Проблема заключается в том, что серверный процесс умирает во время работы клиента. Я (клиентский процесс) хочу иметь возможность получать уведомления, если серверный процесс умирает, и перезапускать серверный процесс.

Можно ли этого добиться самым простым способом? Предлагает ли QNX какой-либо механизм для этого?

PS: я не хочу использовать механизм QNX IPC (например, ConnectAttach).


qnx
person BTR Naidu    schedule 05.09.2014    source источник


Ответы (1)


  1. если сервер не демонизирует себя, то его родитель может обнаружить завершение с помощью обработчика SIGCHLD и функции waitpid(). Случайный пример находится на этой странице среди многих других: http://www.microhowto.info/howto/reap_zombie_processes_using_a_sigchld_handler.html Родительский сервер может предоставить уведомление о завершении.

  2. если сервер демонизирует себя, то любой может обнаружить его прекращение с помощью API-интерфейса procmgr_event_notify(), специфичного для QNX. На следующей странице официальной документации представлен полный пример программы, демонстрирующий использование API: http://www.qnx.com/developers/docs/6.5.0_sp1/index.jsp?topic=%2Fcom.qnx..doc.neutrino_lib_ref%2Fp%2Fprocmgr_event_notify.html

  3. Нехороший стиль, но если вас устраивает быстрый взлом, вы можете периодически просматривать список запущенных процессов в /proc. Каждая числовая запись каталога в /proc представляет процесс с PID=имя каталога. На странице документации в (2.) выше показано, как получить имя (полный путь к двоичному файлу) процесса. Если вы прибегаете к этому методу, я рекомендую выяснить pid процесса, который вы ищете, и отслеживать этот pid только позже, а не каждый раз просматривать полный список. Также обратите внимание, что теоретически исходный процесс может завершиться, и PID может быть повторно использован между двумя последовательными проверками. Если вы в настоящее время запускаете pidin и анализируете его выходные данные, я предлагаю вам использовать метод, описанный в этой записи, поскольку этот подход требует гораздо меньших накладных расходов, чем создание полного процесса pidin.

Дайте мне знать, если у вас есть какие-либо вопросы относительно вышеизложенного.

person maverick    schedule 05.09.2014
comment
Спасибо @maverick. Не могли бы вы пролить свет на демонизацию приложения? Мой env — Blackberry Z10, основанный на QNX и использующий QCoreApplication для создания длительного фонового процесса. - person BTR Naidu; 08.09.2014