Problem: Signale an Hintergrundprozesse schicken
-
Hallo!
ich habe folgendes Problem und zwar müssen zwei Hintergrundprozesse beendet werden sobald strg-C gedrückt wurde, aber da bei Hintergrundprozessen kein Signal empfangen werden kann, brauch ich eine Alternative, aber komm nicht drauf wie ichs anders machen könnte, denn mir stehen nur 3 Programme zur Verfügung (zwei laufen im Hintergurnd und eines beendet sich sofort -> was auch so sein muss und ich mag/darf das nicht ändern).
Zwar gibt es den Befehl kill(pid_t pid, int sig), aber dieser sendet ja sofort ein Signal - ich möchte einfach ein Signal an die Hintergrundprozesse senden, sobald strg+c gedrückt wurde.
Danke für jede Hilfe!
LG
-
Dann brauchst Du einen Vordergrundprozess, der STRG-C abfängt und an den Hintergrundprozess schickt.
Die Tastatureingaben, inkl. der Signale die Du per Tastatur auslösen kannst, gehen - logischerweise - nur an den Prozess, dem das Terminal derzeit gehört. Und das ist naturgemäß ein recht vordergründiger.
Daraus ergibt sich aber die folgende Frage: Das Programm soll sich beenden wenn WO Strg-C gedrückt wurde? Auf dem Terminal, auf dem der Hintergrundprozess gestartet wurde? Auf irgendeinem Terminal? Womöglich sogar, wenn jemand in einer Remote-Session (ssh) Strg-C drückt?
-
Danke für die Antwort, aber gibt es keine andere Möglichkeit ohne irgendeinen Vordergrundprozess, der das Signal schickt - weil soweit hab ichs auch? Also ich teste das Programm über ssh und die beiden hintergrundprogramme sollen einfach beendet werden, wenn auf dem terminal strc+c gedrückt wurde.
-
Wie gesagt, sobald Dein Prozess im Hintergrund ist, also Du wieder eine Shell vor Augen hast, bekommt auch diese Shell wieder die Tastatursignale.
Du könntest evtl. einen Signalhandler für die Shell schreiben, der das INT-Signal abfängt und es an Deinen Prozess weiterschickt (vorausgesetzt, die PID ist bekannt). Das funktioniert aber auch nur, solange Du kein weiteres (Vordergrund-)Programm auf derselben Shell startest, da dann das wieder die Signale bekommt und nicht mehr die Shell.
Muss es denn durch Drücken von Strg-C passieren? Oder soll es für das Hintergrundprogramm lediglich so aussehen, als würde Strg-C gedrückt? Letzteres erreichst Du auf der Shell mit:
# kill -INT <pid_deines_hintergrundprozesses>
-
Die Möglichkeit klingt interessant, aber ist glaube ich für die Aufgabe zu aufwendig. Und ja es sollte durch Strg-c funktionieren.