Synchronous POSIX signal and Language Environment condition handling interactions

This topic discusses how Language Environment processes most synchronous POSIX signals. (The term POSIX signal includes both POSIX-defined signals and C-language signals.) With the exception of the POSIX signals listed in POSIX signals that do not enter condition handling, normal Language Environment condition handling steps occur after a specific thread is selected as the target of a possible signal delivery. This applies whether the signal was directed to a specific thread or to a process (or processes).

Synchronous signal handling takes effect for the following signals, unless they are blocked by the signal mask:
  • A signal you generate by calling the CEESGL (signal a condition) callable service
  • A hardware or software exception caused by a specific thread, which will be delivered to the incurring thread

    These are the exceptions typically caught by ESTAE.

  • A kill() to the current process, a raise(), or a sigqueue() if the process has but a single thread or the signal happens to be delivered to the thread that issued the kill(), raise() or sigqueue().
  • A pthread_kill() issued by a thread to itself

The signal mask is ignored for a signal caused by a program check.

Language Environment processes POSIX signals by using the three general steps of Language Environment condition handling: enablement, condition, and termination imminent, as described in Enablement step for signals under z/OS UNIX, Condition step for POSIX signals under Language Environment, and Termination imminent step under z/OS UNIX.