Auf Unix- und Linux-Systemen können Sie eine anwenderspezifische Fehlerbehandlung programmieren, so dass z.B. ein Vorgang auch bei schwerwiegenden Fehlern fortgesetzt werden kann oder zusätzliche Diagnoseunterlagen erstellt werden können.
Dazu stehen Ihnen folgende Funktionen zur Verfügung:
KCX_REG_USER_SIGNAL_HANDLER
Registrierung der User Signal Routine, die beim Auftreten eines Signals aufgerufen wird. Die Signal Routine muss zusätzlich erstellt werden. Wenn Sie mehrere Signal Routinen registrieren, wird immer die zuletzt registrierte Routine aufgerufen.
Die Registrierung der User Signal Routine in einem utmwork Prozess wirkt bis zur Prozessbeendigung, sofern diese nicht zuvor wieder explizit de-registriert wird.
KCX_UN_REG_USER_SIGNAL_HANDLER
De-Registrierung der User Signal Routine, sofern die User Signal Routine vorher registriert worden war. Diese Funktion sollte unmittelbar vor dem PEND aufgerufen werden.
KCX_SET_RELOAD_FLAG
Austausch des utmwork-Prozesses nach PEND RE.
Der Aufruf dieser Funktion veranlasst den Austausch dieses utmwork-Prozesses, wenn der aktuelle Teilprogrammlauf mit PEND RE beendet wird.
Es wird empfohlen, diese Funktion immer bei Cobol Laufzeitfehlern in der UTM-Anwendung aufzurufen, um die verzögerten oder verschleppten Auswirkungen dieses Fehlers zu eliminieren, d.h. die Dauerlauf-Fähigkeit der Anwendung sicherzustellen.
Bei allen anderen PEND-Aufrufen (Ausnahme PEND ER) wird der utmwork-Prozess nicht ausgetauscht.KCX_WRITE_DUMP
Erzeugen eines UTM-Dumps.
Mit dieser Funktion kann ein Anwendungsprogramm einen UTM-Dump mit einem vom Anwender festgelegten Grund schreiben lassen, ohne dass der Vorgang abgebrochen wird. Es werden von UTM (analog zum PEND ER Dump) der ROOT-Bereich und die Stack-Informationen ausgegeben sowie ein Speicherabzug (Core-Dump) erzeugt.
Hinweise, wie Sie diese Funktionen programmieren müssen, finden Sie auf "Programmierung einer anwenderspezifischen Fehlerbehandlung (Unix- und Linux-Systeme)" (C/C++) sowie auf "Programmierung einer anwenderspezifischen Fehlerbehandlung (Unix- und Linux-Systeme)" (COBOL).
User Signal Routine
Die User Signal Routine wird beim Auftreten eines Signals im Anwendungsprogramm von openUTM anstatt der Standard-Fehlerbehandlung ausgeführt. Die User Signal Routine wird unter folgenden Bedingungen aufgerufen:
Beim Auftreten der Signale SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGPWR und SIGABRT im Anwendungsprogramm.
Bei SIGALRM nach Ablauf des Programm-Laufzeit-Timer im Anwendungsprogramm.
Der Einsatz einer User Signal Routine ermöglicht:
Behandlung von Programm-Fehlern innerhalb des UTM-Vorganges.
Ausgabe von spezifischen Fehlermeldungen an den UPIC-Client.
Fortsetzung des UTM-Vorgangs trotz Fehlern im Anwendungsprogramm.
Die User Signal Routine ersetzt die Standard-Fehlerbehandlung von openUTM, d.h. abnormales Vorgangsende mit PENDER / XTnn (nn = Signalnummer), Ausgabe von K017 an Terminal-Clients, bei UPIC-Clients in UPIC-Logfile (+ Fehlercode "CM_DEALLOCATED_ABEND"), PEND ER Dump und Austausch des utmwork-Prozesses.
Die User Signal Routine sollte nur "Aufräumaktionen" veranlassen und danach das Programm mit PEND RE beenden. Typische "Aufräumaktionen" eines Dialog-Programms sind z.B. folgende KDCS-Aufrufe:
RSET zum Zurücksetzen der Transaktionsdaten,
MPUT NE mit geeigneter Fehlermeldung an den Client,
PEND RE für die Festlegung des Folge-Programms, das nach dieser Fehlersituation laufen soll.
Es wird immer die zuletzt registrierte Signal Routine aufgerufen.
Zusätzlich wird von UTM der betroffene utmwork-Prozess nach dem nächsten KDCS-Aufruf PEND RE ausgetauscht.
Ein Beispiel finden Sie auf "User Signal Routinen (Unix- und Linux-Systeme)" (C-Programm) bzw. "User Signal Routinen (Unix- und Linux-Systeme)" (COBOL-Programm).
Bitte beachten Sie, das im Anwendungsprogramm keine Timer-Funktionen wie die C-Bibliotheksfunktion alarm() verwendet werden dürfen, zumindest dann nicht, wenn für den aktuellen TAC ein Timer generiert ist (KDCDEF-Generierung TAC RTIME= <rtime>)