2010-10-03 3 views
2

Y at-il une méthode pour informer un processus connecté via Dbus que l'autre processus est mort? Je veux dire, le processus défectueux pourrait informer l'autre qu'il avait une terminaison anormale. Je sais que vous pouvez vérifier le type d'erreur de retour, mais je veux autre chose. Par exemple considérons que nous avons un processus en attente d'une réponse mais nous détruisons l'autre processus avec CTRL + C. Existe-t-il un moyen de notifier l'autre processus .. ou vous devriez juste attendre quelques secondes pour la réponse ... etcDbus - contrôle des défauts

Répondre

4

À un niveau bas: vous pouvez vous connecter au signal NameOwnerChanged sur le démon D-Bus, qui est émis chaque fois qu'un nom est revendiqué ou libéré sur le bus. Ainsi, si le processus de travail prend le nom bien connu com.example.Foo, vous pouvez ajouter une règle de correspondance pour sender=org.freedesktop.DBus,path=/org/freedesktop/DBus,interface=org.freedesktop.DBus,member=NameOwnerChanged,type=signal,arg0=com.example.Foo. (La arg0 partie de la match rule vous empêche d'être avisé pour les services autres que celui que vous aimez.)

niveau supérieur: si vous êtes en attente sur le résultat d'un appel de méthode, votre fixation (tels que qdbus ou GDBus) devrait appeler votre rappel avec une erreur vous disant que c'est ce qui s'est passé. Mais vous pouvez également utiliser une API de plus haut niveau pour regarder NameOwnerChanged. Pour GDBus, voir la famille de fonctions g_bus_watch.