![](https://csdnimg.cn/release/download_crawler_static/10830725/bg12.jpg)
xiv
24 Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
24.1 Basic Concepts of Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
24.1.1 Some Kinds of Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707
24.1.2 Concepts of Signal Generation . . . . . . . . . . . . . . . . . . . . . . . . . . 707
24.1.3 How Signals Are Delivered. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708
24.2 Standard Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
24.2.1 Program Error Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 709
24.2.2 Termination Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
24.2.3 Alarm Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
24.2.4 Asynchronous I/O Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
24.2.5 Job Control Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714
24.2.6 Operation Error Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
24.2.7 Miscellaneous Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716
24.2.8 Signal Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
24.3 Specifying Signal Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
24.3.1 Basic Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
24.3.2 Advanced Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
24.3.3 Interaction of signal and sigaction . . . . . . . . . . . . . . . . . . . 721
24.3.4 sigaction Function Example . . . . . . . . . . . . . . . . . . . . . . . . . . 721
24.3.5 Flags for sigaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
24.3.6 Initial Signal Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
24.4 Defining Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
24.4.1 Signal Handlers that Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724
24.4.2 Handlers That Terminate the Process . . . . . . . . . . . . . . . . . . . 725
24.4.3 Nonlocal Control Transfer in Handlers . . . . . . . . . . . . . . . . . . 726
24.4.4 Signals Arriving While a Handler Runs . . . . . . . . . . . . . . . . . 727
24.4.5 Signals Close Together Merge into One . . . . . . . . . . . . . . . . . 727
24.4.6 Signal Handling and Nonreentrant Functions . . . . . . . . . . . . 730
24.4.7 Atomic Data Access and Signal Handling . . . . . . . . . . . . . . . 731
24.4.7.1 Problems with Non-Atomic Access . . . . . . . . . . . . . . . . . 732
24.4.7.2 Atomic Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732
24.4.7.3 Atomic Usage Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
24.5 Primitives Interrupted by Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733
24.6 Generating Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
24.6.1 Signaling Yourself . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734
24.6.2 Signaling Another Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
24.6.3 Permission for using kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736
24.6.4 Using kill for Communication . . . . . . . . . . . . . . . . . . . . . . . . . 737
24.7 Blocking Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
24.7.1 Why Blocking Signals is Useful . . . . . . . . . . . . . . . . . . . . . . . . . 738
24.7.2 Signal Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
24.7.3 Process Signal Mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
24.7.4 Blocking to Test for Delivery of a Signal . . . . . . . . . . . . . . . . 741
24.7.5 Blocking Signals for a Handler . . . . . . . . . . . . . . . . . . . . . . . . . . 742
24.7.6 Checking for Pending Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . 743
24.7.7 Remembering a Signal to Act On Later . . . . . . . . . . . . . . . . . 744
24.8 Waiting for a Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
24.8.1 Using pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745