PDA

View Full Version : Signale aus C-Programmen an laufende Prozesse senden



kschmidt
13-01-04, 10:33
Unter Unix können zwischen verschiedenen Prozessen mit der kill-Funktion Signale gesendet werden.
Das soll unter OS/400 auch gehen, soweit ich das der Doku entnehmen konnte. Ich habe es in C-Programmen probiert.
Prinzipiell klappt das auch, die Signale kommen an, aber leider ist die Reaktion immer die gleiche, der Job wird beendet, z.B.:

Für den Job wurde ein SIGUSR1-Signal empfangen. Die entsprechende Aktion war das Beenden des Jobs.

Dabei kommen durchaus unterschiedliche Signale (hier SIGUSR1) an. Was mache ich falsch? Ich würde auf diese SIGUSR*-Signale gern individuell reagieren können und nur bei entsprechenden Signalen wie z.B. SIGTERM den Job beenden.

Fuerchau
13-01-04, 10:40
Für die Signalbehandlung gibt es spezielle C-Funktionen, mit denen man ein Signal abfangen kann. Hierbei wird für das entsprechende Signal eine Prozedur-Adresse übergeben bzw. das Signal auf IGNORE gesetzt.

Dies funktioniert nur in C-Umgebungen und kann in RPGLE nicht verwendet werden.

kschmidt
13-01-04, 10:43
Danke für die Antwort.
Ich will auch nur C-Programme verwenden.
Gibt es dafür eine Beschreibung und vielleicht ein Beispiel?

Fuerchau
13-01-04, 14:05
Schau mal im C++-Handbuch nach:

http://publib.boulder.ibm.com/iseries/v5r2/ic2924/books/c4156071.pdf

und suche nach der Funktion "signal()"

kschmidt
14-01-04, 15:04
Hallo,
die Doku war mir bekannt und danach haben wir das Ganze auch versucht zu realisieren.
Da es dabei bisher keinen Erfolg gab, habe ich dann gestern einige Testausgaben an den verschiedensten Stellen eingefügt und plötzlich funktionierte es. Nach einigen weiteren Versuchen, blieben dann diese beiden Zeilen vor dem Initialisieren der Signale übrig, deren Entfernen wieder dazu führte, daß es nicht mehr funktioniert:

fprintf(stderr,"Sinale initialisieren\n");
fflush(stderr);
InitializeSignals();

Vielleicht habe ich auch noch irgendwann Zeit, herauszubekommen, was die wirkliche Ursache ist.

Danke und Gruß!
Karin Schmidt