Hallo,
ich habe es jetzt mal mit fork probiert, leider funktioniert es nicht so richtig.
Zum test habe ich mal emacs starten lassen, damit man auf dem Bildschrim auch was sieht.
Der Code sieht so aus:
Code:
connected = !connected;
if (connected) {
child_pid = fork();
if (child_pid > 0)
execlp("/usr/bin/emacs", "/tmp/test.txt", NULL);
gtk_image_set_from_stock ((GtkImage*)data,
GTK_STOCK_CONNECT,GTK_ICON_SIZE_MENU);
} else {
if (child_pid > 0)
kill(child_pid, 9);
gtk_image_set_from_stock ((GtkImage*)data,
GTK_STOCK_DISCONNECT,GTK_ICON_SIZE_MENU);
}
child_pid ist als globaler int deklariert.
es ist quasi ein Button der bei jedem Klick den Zustand wechseln soll (starten/beenden).
Der neue Prozess wird jetzt gestartet und emacs auch. Aber bei einem zweiten klick auf den Button wird er nichtmehr beendet bzw. gekillt.
Was mache ich falsch?
Danke!
@peschmae: ja, bei uns an der Uni funktioniert wlan mit vpn derzeit leider nur mit dem cisco-client. Ich habe aber gehört, dass auch an alternativen Lösungen gearbeitet wird, da der cisco Client nicht auf allen Systemen so richtig läuft.
Auch den cisco-client kann man natürlich einfach in der Konsole starten, aber ich dachte so ein applet wäre ganz nett und ist die Gelegenheit mich mal mit der Programmierung von panal-applets zu beschäftigen.
EDIT: Ich denke, dass es mit fork() und execlp() nicht geht, zumindest nicht so wie ich es gemacht habe. fork() erzeugt einen neuen Prozess und execlp() einen weiteren, beide sind aber voneinander unabhängig. Wenn ich also den child Porzess von fork() beende hat das keinen Einfluß auf den Prozess der mit execlp() erstellt wurde.
Nur wie mache ich es dann? Damit bin ich wieder am Anfang.
Lesezeichen