Ich bin neu mit C++. Mein Problem ist, dass ich einen Prozess habe, der viele Prozesse erzeugt, ich möchte eines der Kinder identifizieren (pid bekommen). Das Durchschleifen von Kindern würde viele Ressourcen erfordern (frag nicht warum). SO versuche ich, die PID des Prozesses durch (irgendwie) zu identifizieren, wenn es sd_notify
verwendet und die PID erhält (ich nicht wirklich jetzt, wenn es möglich ist). Ich bin mit Ubuntu 14.04 und erstellt wenig Testprogramm:C++: undefinierter Verweis auf `sd_notify '
#include <systemd/sd-daemon.h>
#include <stdio.h>
int main()
{
int a;
a = sd_notify(0, "READY=1");
printf("%d -> \n", a);
fflush(stdout);
}
Aber es gibt mir Fehlermeldung, dass undefined reference to 'sd_notify'
.
S.S Ich fand, dass sd_notify
für systemd Systeme ist. Was ist das in Upstart-Systemen gleichzusetzen? Oder wie kann ich sicherstellen, dass der Prozess, den ich suche, diese Funktion nicht nutzt? Oder ist es möglich, alle Nachrichten, die von Prozessen gesendet werden, mit sd_notify
zu protokollieren?
Scheint ein bisschen wie [XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy - Problem) - Warum glauben Sie, dass Sie einen Prozess identifizieren können, nur weil er 'sd_notify' verwendet? Warum musst du die PID dieses bestimmten Kindes überhaupt bekommen? – davmac
Was ich eigentlich versuche, ist, dass ich als Benutzer A angemeldet bin, den Prozess als Benutzer B anlege, und dieser Prozess eine Sitzung für Benutzer B erstellt ('/ etc/X11/Xsession 'gnome-session --session = ubuntu'') Ich versuche, den dbus-Verbindungsnamen (von dbus-daemon --session) von diesem Prozess von Benutzer B zu erhalten und den Benutzer abzumelden. – Rasty
ok, dann ist das die Frage, die Sie gestellt haben sollten. :) (und mit viel Detail hinzugefügt, weil es eine Menge Dinge, die nach wie vor unklar, über die Grenzen von dem, was Sie tun, warum nicht die Standard-DBus-APIs verwenden, -. Entweder systemd oder consolekit - die Sitzung zu lokalisieren) – davmac