xiv The GNU C Library
23 Non-Local Exits . . . . . . . . . . . . . . . . . . . . . . . . 625
23.1 Introduction to Non-Local Exits. . . . . . . . . . . . . . . . . . . . . . . 625
23.2 Details of Non-Local Exits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
23.3 Non-Local Exits and Signals . . . . . . . . . . . . . . . . . . . . . . . . . . 627
23.4 Complete Context Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628
24 Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . 635
24.1 Basic Concepts of Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635
24.1.1 Some Kinds of Signals . . . . . . . . . . . . . . . . . . . . . . . 635
24.1.2 Concepts of Signal Generation . . . . . . . . . . . . . . . . 636
24.1.3 How Signals Are Delivered . . . . . . . . . . . . . . . . . . . 636
24.2 Standard Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637
24.2.1 Program Error Signals . . . . . . . . . . . . . . . . . . . . . . . 637
24.2.2 Termination Signals . . . . . . . . . . . . . . . . . . . . . . . . . 640
24.2.3 Alarm Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641
24.2.4 Asynchronous I/O Signals . . . . . . . . . . . . . . . . . . . . 642
24.2.5 Job Control Signals . . . . . . . . . . . . . . . . . . . . . . . . . . 642
24.2.6 Operation Error Signals . . . . . . . . . . . . . . . . . . . . . . 644
24.2.7 Miscellaneous Signals . . . . . . . . . . . . . . . . . . . . . . . . 645
24.2.8 Signal Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645
24.3 Specifying Signal Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646
24.3.1 Basic Signal Handling. . . . . . . . . . . . . . . . . . . . . . . . 646
24.3.2 Advanced Signal Handling . . . . . . . . . . . . . . . . . . . 648
24.3.3 Interaction of signal and sigaction . . . . . . . . . 649
24.3.4 sigaction Function Example . . . . . . . . . . . . . . . . 650
24.3.5 Flags for sigaction . . . . . . . . . . . . . . . . . . . . . . . . . 651
24.3.6 Initial Signal Actions . . . . . . . . . . . . . . . . . . . . . . . . 652
24.4 Defining Signal Handlers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
24.4.1 Signal Handlers that Return. . . . . . . . . . . . . . . . . . 653
24.4.2 Handlers That Terminate the Process . . . . . . . . . 654
24.4.3 Nonlocal Control Transfer in Handlers . . . . . . . . 655
24.4.4 Signals Arriving While a Handler Runs. . . . . . . . 656
24.4.5 Signals Close Together Merge into One . . . . . . . . 657
24.4.6 Signal Handling and Nonreentrant Functions . . 659
24.4.7 Atomic Data Access and Signal Handling . . . . . . 661
24.4.7.1 Problems with Non-Atomic Access . . . 661
24.4.7.2 Atomic Types . . . . . . . . . . . . . . . . . . . . . . 662
24.4.7.3 Atomic Usage Patterns . . . . . . . . . . . . . . 662
24.5 Primitives Interrupted by Signals . . . . . . . . . . . . . . . . . . . . . . 663
24.6 Generating Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
24.6.1 Signaling Yourself . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
24.6.2 Signaling Another Process. . . . . . . . . . . . . . . . . . . . 665
24.6.3 Permission for using kill . . . . . . . . . . . . . . . . . . . . 666
24.6.4 Using kill for Communication . . . . . . . . . . . . . . . 667
24.7 Blocking Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
24.7.1 Why Blocking Signals is Useful . . . . . . . . . . . . . . . 669
24.7.2 Signal Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
24.7.3 Process Signal Mask . . . . . . . . . . . . . . . . . . . . . . . . . 670