Name

Number

Default action

Description

SIGHUP

1

Exit

Hangup (ref termio(7I)).

SIGINT

2

Exit

Interrupt (ref termio(7I)).

SIGQUIT

3

Core

Quit (ref termio(7I))

SIGILL

4

Core

Illegal Instruction

SIGTRAP

5

Core

Trace or breakpoint trap

SIGABRT

6

Core

Abort

SIGEMT

7

Core

Emulation trap

SIGFPE

8

Core

Arithmetic exception

SIGKILL

9

Exit

Kill

SIGBUS

10

Core

Bus error -- actually a misaligned address error

SIGSEGV

11

Core

Segmentation fault -- an address reference boundary error

SIGSYS

12

Core

Bad system call

SIGPIPE

13

Exit

Broken pipe

SIGALRM

14

Exit

Alarm clock

SIGTERM

15

Exit

Terminated

SIGUSR1

16

Exit

User defined signal 1

SIGUSR2

17

Exit

User defined signal 2

SIGCHLD

18

Ignore

Child process status changed

SIGPWR

19

Ignore

Power fail or restart

SIGWINCH

20

Ignore

Window size change

SIGURG

21

Ignore

Urgent socket condition

SIGPOLL

22

Exit

Pollable event (ref streamio(7I))

SIGSTOP

23

Stop

Stop (cannot be caught or ignored)

SIGTSTP

24

Stop

Stop (job control, e.g., ^z))

SIGCONT

25

Ignore

Continued

SIGTTIN

26

Stop

Stopped -- tty input (ref termio(7I))

SIGTTOU

27

Stop

Stopped -- tty output (ref termio(7I))

SIGVTALRM

28

Exit

Virtual timer expired

SIGPROF

29

Exit

Profiling timer expired

SIGXCPU

30

Core

CPU time limit exceeded (ref getrlimit(2))

SIGXFSZ

31

Core

File size limit exceeded (ref getrlimit(2))

SIGWAITING

32

Ignore

Concurrency signal used by threads library

SIGLWP

33

Ignore

Inter-LWP signal used by threads library

SIGFREEZE

34

Ignore

Checkpoint suspend

SIGTHAW

35

Ignore

Checkpoint resume

SIGCANCEL

36

Ignore

Cancellation signal used by threads library

SIGLOST

37

Ignore

Resource lost

SIGRTMIN

38

Exit

Highest priority realtime signal

SIGRTMAX

45

Exit

Lowest priority realtime signal

 

 

k_sigset_t data structure
Figure 1. k_sigset_t data structure
(Click image to enlarge.)

Signals in Solaris

The multithreaded architecture of Solaris made for some interesting challenges in developing a means of supporting signals that comply with the UNIX signal semantics, as defined by industry standards such as POSIX. Signals traditionally go through two well-defined stages: generation and delivery. Signal generation is the point of origin of the signal, or the sending phase. A signal is said to be delivered when whatever disposition that has been established for the signal is invoked, even if it is to be ignored. If a signal is being blocked, thus postponing delivery, it is considered pending.

User threads in Solaris, created via explicit calls to either thr_create(3T) or pthread_create(3T), all have their own signal masks. Threads can choose to block signals independent of other threads executing in the same process, which allows different threads to take delivery of different signals at various times during process execution. The thread's libraries (POSIX and Solaris threads) provide thr_sigsetmask(3T) and pthread_sigmask(3T) interfaces for establishing per-user thread signal masks. The disposition and handlers for all signals are shared by all the threads in a process. So, for example, a SIGINT with the default disposition in place will cause the entire process to exit.