![](https://csdnimg.cn/release/download_crawler_static/11574820/bg12.jpg)
xiv
24 Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
24.1 Basic Concepts of Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
24.1.1 Some Kinds of Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
24.1.2 Concepts of Signal Generation . . . . . . . . . . . . . . . . . . . . . . . . . 659
24.1.3 How Signals Are Delivered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
24.2 Standard Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
24.2.1 Program Error Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661
24.2.2 Termination Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
24.2.3 Alarm Signals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
24.2.4 Asynchronous I/O Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
24.2.5 Job Control Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
24.2.6 Operation Error Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
24.2.7 Miscellaneous Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
24.2.8 Signal Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
24.3 Specifying Signal Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
24.3.1 Basic Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
24.3.2 Advanced Signal Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
24.3.3 Interaction of signal and sigaction . . . . . . . . . . . . . . . . . . . 673
24.3.4 sigaction Function Example . . . . . . . . . . . . . . . . . . . . . . . . . . 673
24.3.5 Flags for sigaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
24.3.6 Initial Signal Actions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675
24.4 Defining Signal Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
24.4.1 Signal Handlers that Return . . . . . . . . . . . . . . . . . . . . . . . . . . . 676
24.4.2 Handlers That Terminate the Process . . . . . . . . . . . . . . . . . . 677
24.4.3 Nonlocal Control Transfer in Handlers . . . . . . . . . . . . . . . . . . 678
24.4.4 Signals Arriving While a Handler Runs . . . . . . . . . . . . . . . . . 679
24.4.5 Signals Close Together Merge into One . . . . . . . . . . . . . . . . . 679
24.4.6 Signal Handling and Nonreentrant Functions . . . . . . . . . . . 682
24.4.7 Atomic Data Access and Signal Handling . . . . . . . . . . . . . . . 683
24.4.7.1 Problems with Non-Atomic Access . . . . . . . . . . . . . . . . 684
24.4.7.2 Atomic Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
24.4.7.3 Atomic Usage Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
24.5 Primitives Interrupted by Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
24.6 Generating Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
24.6.1 Signaling Yourself . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
24.6.2 Signaling Another Process. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687
24.6.3 Permission for using kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688
24.6.4 Using kill for Communication . . . . . . . . . . . . . . . . . . . . . . . . . 689
24.7 Blocking Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690
24.7.1 Why Blocking Signals is Useful . . . . . . . . . . . . . . . . . . . . . . . . . 690
24.7.2 Signal Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
24.7.3 Process Signal Mask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
24.7.4 Blocking to Test for Delivery of a Signal . . . . . . . . . . . . . . . . 693
24.7.5 Blocking Signals for a Handler . . . . . . . . . . . . . . . . . . . . . . . . . 694
24.7.6 Checking for Pending Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . 695
24.7.7 Remembering a Signal to Act On Later . . . . . . . . . . . . . . . . 696
24.8 Waiting for a Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697
24.8.1 Using pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697