abfangen wenn Programm beendet wird
-
Hallo,
ich habe in meinem Programm, das später als Daemon laufen soll, einen Signalhandler
eingebaut.
Wenn ich das Programm auf der Konsole starte und mit CTRL-C beende löst dieser auch aus. (erzeuge und schreibe Logdatei mit)Wenn ich mein Programm als Deamon im /etc/init.d/ Verzeichnis mit
einem Script startestartproc myprogramm
und mit dem Befehl
killproc -TERM myprogramm
beende,
wird der Signalhaendler nicht ausgelöst.Warum
Gruß
-
Das eine ist wohl sigkill und das andere sigterm - sind die wirklich beide
abgefangen ?
-
Auf meinem Linux gibt es weder startproc noch killproc.
-
pferdefreund schrieb:
Das eine ist wohl sigkill und das andere sigterm - sind die wirklich beide
abgefangen ?SIGKILL und SIGSTOP können nicht abgefangen werden. Aber vermutlich fehlt dem OP ein Handler für SIGTERM.
-
Hallo,
eigentlich habe ich schon einen Signalhandler initialisiert.
if (SIG_ERR == signal(SIGINT, signalauswertung)) { schreibeLogeintrag("mpi: Fehler beim installieren des Signalhandlers"); exit(1); }
somit habe ich schon einmal alle Signale abgefangen.
Dann mitvoid signalauswertung(int signalnummer) { printf("%i\n",signalnummer); return; }
sollte zum testen reichen.
Sollte es wirklich sein das Linux kein Handler für SIGTERM hat ??
Gruß
Peter
-
worst_case schrieb:
Sollte es wirklich sein das Linux kein Handler für SIGTERM hat ??
doch klar, damit wird das programm beendet. Wenn du das abfangen willst, musst du deinen eigenen installieren.
sigint ist nur ctrl-c
-
Abend,
wie soll ich einen installieren, was meinst du damit
Danke
worst_case
-
worst_case schrieb:
Hallo,
eigentlich habe ich schon einen Signalhandler initialisiert.
if (SIG_ERR == signal(SIGINT, signalauswertung)) { schreibeLogeintrag("mpi: Fehler beim installieren des Signalhandlers"); exit(1); }
richtig, damit fängst du aber nur SIGINT und nicht SIGTERM ab
siehe man: signal(7)
-
worst_case schrieb:
Abend,
wie soll ich einen installieren, was meinst du damit
Danke
worst_casesiehe mein letzter Post:
if (SIG_ERR == signal(SIGINT, signalauswertung)) { schreibeLogeintrag("mpi: Fehler beim installieren des Signalhandlers"); exit(1); } /* SIGTERM soll gleich behandelt werden */ if (SIG_ERR == signal(SIGTERM, signalauswertung)) { schreibeLogeintrag("mpi: Fehler beim installieren des Signalhandlers"); exit(1); }
-
Hallo,
danke für den Tip. Genau so geht es.
Gruß
worst_case