Dbus - контроль неисправностей - PullRequest
2 голосов
/ 03 октября 2010

Есть ли способ сообщить процессу, подключенному через Dbus, о том, что другой процесс умер ? Я имею в виду, мог ли неисправный процесс сообщить другому, что у него было аварийное завершение.Я знаю, что вы можете проверить тип ошибки возврата, но я хочу что-то еще.Например, у нас есть процесс, ожидающий ответа, но мы убиваем другой процесс с помощью CTRL + C.Есть ли способ уведомить другой процесс ... или вам просто нужно подождать несколько секунд ответа ... etc

1 Ответ

4 голосов
/ 09 октября 2010

На низком уровне: вы можете подключиться к сигналу NameOwnerChanged на демоне D-Bus, который излучается всякий раз, когда имя запрашивается или освобождается на шине.Поэтому, если рабочий процесс принимает известное имя com.example.Foo, вы можете добавить правило соответствия для sender=org.freedesktop.DBus,path=/org/freedesktop/DBus,interface=org.freedesktop.DBus,member=NameOwnerChanged,type=signal,arg0=com.example.Foo.(arg0 часть правила совпадения запрещает вам получать уведомления об услугах, отличных от той, которая вам нужна.)

Более высокий уровень: если вы ожидаете результатавызов метода, ваша привязка (такая как QDBus или GDBus) должна вызвать ваш обратный вызов с ошибкой, сообщающей вам, что это то, что произошло.Но вы также можете использовать высокоуровневый API для просмотра NameOwnerChanged.Для GDBus см. Семейство функций g_bus_watch .

...