Daemon einer Console zuweisen
-
Ich habe einen Daemon geschrieben, welchen ich aber nach einer bestimmten Zeit wieder der Console zuweisen will.
Daemon mit fork erzeugt und
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
gemacht. Der Daemon reagiert auf Signale, so kann ich ihn ansprechen. Aber wie schaffe ich es, das der Daemon die stdin/out/err von der aktuellen Console übernimmt, und damit Eingaben empfängt?
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Warum lässt Du ihn nicht einfach in einer screen-Session laufen? Die kannst Du jederzeit detachen und reattachen und in der Ausgabe herumscrollen etc.
-
Geht leider nicht, weil embedded System. Ich muß das mit C++ bzw linux Hausmitteln machen.
-
Wie wärs denn mit pollen einer named pipe für die Eingaben
-
habs auch geschaft, fange SIGHUP ab und schließe meine stdin/out/err.
ich speichere meine PID. Im nächsten Terminal beim Programmstart lese ich die PID und das aktuelle Terminal, sende ein SIGUSR1 zur PID, öffne mit open() das aktuelle Terminal und lenke mit dup2 die descriptoren um.Jetzt würde ich das gerne anders machen:
Das Programm, welches aktuell im Terminal läuft, soll sozusagen ein Zombie werden. Also im Hintergrund als Daemon laufen, geht auch, nur das aktuelle Terminal denkt immer, das Programm läuft und empfängt keine Eingaben. Ich muß das Terminal also schließen und wieder öffnen, um normal weiter zu arbeiten. Ich will mein Programm nicht in den Jobmanager schieben!
(Aber das muß OHNE fork() gemacht werden, fork macht meine Thread kaputt.)
-
also einfach ausgedrückt:
Mein Programm startet vom Terminal, reagiert auf eine Eingabe und macht jetzt ???, so das das Terminal denkt, mein Programm hat sich beendet. Und jetzt kann ich mit den Terminal weiterarbeiten. Ich würde die Prozessgruppe ändern, aber irgendwie bringt das nix, das Terminal reagiert darauf nicht.