xiv
24 Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
24.1 Basic Concepts of Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
24.1.1 Some Kinds of Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
24.1.2 Concepts of Signal Generation . . . . . . . . . . . . . . . . . . . . . . . . . 603
24.1.3 How Signals Are Delivered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604
24.2 Standard Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
24.2.1 Program Error Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605
24.2.2 Termination Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
24.2.3 Alarm Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
24.2.4 Asynchronous I/O Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609
24.2.5 Job Control Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610
24.2.6 Operation Error Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611
24.2.7 Miscellaneous Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
24.2.8 Signal Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
24.3 Specifying Signal Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
24.3.1 Basic Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613
24.3.2 Advanced Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616
24.3.3 Interaction of signal and sigaction . . . . . . . . . . . . . . . . . . . 617
24.3.4 sigaction Function Example . . . . . . . . . . . . . . . . . . . . . . . . . . 617
24.3.5 Flags for sigaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618
24.3.6 Initial Signal Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
24.4 Defining Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619
24.4.1 Signal Handlers that Return . . . . . . . . . . . . . . . . . . . . . . . . . . . 620
24.4.2 Handlers That Terminate the Process . . . . . . . . . . . . . . . . . . 621
24.4.3 Nonlocal Control Transfer in Handlers . . . . . . . . . . . . . . . . . . 621
24.4.4 Signals Arriving While a Handler Runs . . . . . . . . . . . . . . . . . 622
24.4.5 Signals Close Together Merge into One . . . . . . . . . . . . . . . . . 623
24.4.6 Signal Handling and Nonreentrant Functions . . . . . . . . . . . 625
24.4.7 Atomic Data Access and Signal Handling . . . . . . . . . . . . . . . 627
24.4.7.1 Problems with Non-Atomic Access . . . . . . . . . . . . . . . . 627
24.4.7.2 Atomic Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
24.4.7.3 Atomic Usage Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
24.5 Primitives Interrupted by Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . 629
24.6 Generating Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
24.6.1 Signaling Yourself . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
24.6.2 Signaling Another Process. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
24.6.3 Permission for using kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
24.6.4 Using kill for Communication . . . . . . . . . . . . . . . . . . . . . . . . . 632
24.7 Blocking Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
24.7.1 Why Blocking Signals is Useful . . . . . . . . . . . . . . . . . . . . . . . . . 634
24.7.2 Signal Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
24.7.3 Process Signal Mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
24.7.4 Blocking to Test for Delivery of a Signal . . . . . . . . . . . . . . . . 636
24.7.5 Blocking Signals for a Handler . . . . . . . . . . . . . . . . . . . . . . . . . 637
24.7.6 Checking for Pending Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . 638
24.7.7 Remembering a Signal to Act On Later . . . . . . . . . . . . . . . . 639
24.8 Waiting for a Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640
24.8.1 Using pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640