Signals! Goals of this Lecture! Help you learn about:" Sending signals" Handling signals"

Similar documents
Signals. Goals of this Lecture. Help you learn about: Sending signals Handling signals

Signals! Goals of this Lecture! Help you learn about:" Sending signals" Handling signals"

Goals of this Lecture

signals Communicating with the OS System call (last lecture) Signal (this lecture) User Process Operating System

Princeton University. Computer Science 217: Introduction to Programming Systems. Signals

Signals. Joseph Cordina

System Programming. Signals I

Lesson 3. The func procedure allows a user to choose the action upon receipt of a signal.

Operating Systems. Threads and Signals. Amir Ghavam Winter Winter Amir Ghavam

CSE 421: Introduction to Operating Systems

System Calls and Signals: Communication with the OS. System Call. strace./hello. Kernel. Context Switch

System Calls & Signals. CS449 Spring 2016

CS 33. Signals Part 1. CS33 Intro to Computer Systems XXII 1 Copyright 2017 Thomas W. Doeppner. All rights reserved.

Preview. Process Termination. wait and waitpid() System Call. wait and waitpid() System Call. waitpid() System Call 10/23/2018

Fortran Signal Handling

Signals. Jin-Soo Kim Computer Systems Laboratory Sungkyunkwan University

APPLIED INFORMATICS Processes. Bash characteristics. Command type. Aliases.

Chapter 4 Multithreaded Programming

Multitasking. Programmer s model of multitasking. fork() spawns new process. exit() terminates own process

CS213. Exceptional Control Flow Part II. Topics Process Hierarchy Signals

CSci 4061 Introduction to Operating Systems. (Advanced Control Signals)

ECE 650 Systems Programming & Engineering. Spring 2018

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2018 Lecture 18

Programming Assignments will be.. All the PAs are continuous 3 major factors that you should consider

Process. Signal #8. Signals are software interrupts from unexpected events. a power failure. an alarm clock. the death of a child process

Acontecimentos assíncronos (POSIX signals) Sincronização com múltiplos acontecimentos

So far, we know how to create processes. How do we communicate with them? Primary mechanism: signals

Computer Science & Engineering Department I. I. T. Kharagpur. Operating System: CS rd Year CSE: 5th Semester (Autumn ) Lecture VII

KING FAHD UNIVERSITY OF PETROLEUM AND MINERALS Information and Computer Science Department ICS 431 Operating Systems Lab # 6

Processes & Signals. System Runs Many Processes Concurrently. State consists of memory image + register values + program counter

Signals. CSC209: Software Tools and Systems Programming. Furkan Alaca & Paul Vrbik

PVPSIDDHARTHA INSTITUTE OF TECHNOLOGY

CSC209H Lecture 8. Dan Zingaro. March 4, 2015

Operating Systems 2010/2011

Interprocess Communication

Shell and Signals. Computer Organization 3/17/2015. CSC252 - Spring The World of Multiprogramming or Multitasking. Unix Process Hierarchy

Signals, Synchronization. CSCI 3753 Operating Systems Spring 2005 Prof. Rick Han

Final Precept: Ish. Slides Originally Prepared by: Wonho Kim

CS240: Programming in C

Lecture 24: Multitasking and Signals

Exceptions, Processes and Signals

Overview. Administrative. * HW 1 grades. * HW 2 Due. Topics. * 5.1 What is a Signal? * Dealing with Signals - masks, handlers

Overview. POSIX signals. Generation of signals. Handling signals. Some predefined signals. Real-time Systems D0003E 3/3/2009

F28HS Hardware-Software Interface: Systems Programming

Inter Process Communication

IMPLEMENTATION OF SIGNAL HANDLING. CS124 Operating Systems Fall , Lecture 15

Process Control. Philipp Koehn. 23 April 2018

系統程式 郭大維教授 / 施吉昇教授臺灣大學資訊工程系

Processes. Processes (cont d)

Signal Example 1. Signal Example 2

UNIX System Programming. Overview. 2. Signal Types (31 in POSIX) Signal Sources. Signals. 1. Definition

Embedded Systems Programming

Exceptional Control Flow Exists at All Levels of a System. Systemprogrammering 2007 Föreläsning 3 Exceptional Control Flow Part II

Chapter 1 Introduction

Kernel and processes

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2017 Lecture 19

Signals: Management and Implementation. Sanjiv K. Bhatia Univ. of Missouri St. Louis

n Unconditionally kill process 8371 n Interactive interrupt key n See /usr/include/bits/signum.h (e.g., SIGKILL 9) 2 -Ken Wong, Sep 2008

ECF Exists at All Levels of a System Exceptional Control Flow Part II Oct. 22, 2002 Topics! Process Hierarchy! Shells! Signals!

Process management. What s in a process? What is a process? The OS s process namespace. A process s address space (idealized)

Giving credit where credit is due

CS24: INTRODUCTION TO COMPUTING SYSTEMS. Spring 2018 Lecture 20

CSE 451: Operating Systems Winter Module 4 Processes. Mark Zbikowski Allen Center 476

Exceptional Control Flow Part II

Processes, Signals, I/O, Shell Lab : Introduc>on to Computer Systems Recita>on 9: Monday, Oct. 21, 2013 Marjorie Carlson Sec>on A

CSE 410: Computer Systems Spring Processes. John Zahorjan Allen Center 534

Signals and Session Management. Signals. Mechanism to notify processes of system events

What is an Operating System? Signals, Processes, & Threads. Resource Sharing. Resource Abstraction ... Operating Systems 10/20/2010

Signals. POSIX defines a variety of signal types, each for a particular

* What are the different states for a task in an OS?

Advanced Unix/Linux System Program. Instructor: William W.Y. Hsu

COMP 2400 UNIX Tools

Operating Systems Grado en Informática. Course

Unix System Programming - Chapter 8

Preview. The pause() System Call. The pause() System Call. The signal() System Call 10/18/2017

Lecture 4 Threads. (chapter 4)

Shell Execution of Programs. Process Groups, Session and Signals 1

Systems Programming/ C and UNIX

COSC243 Part 2: Operating Systems

Chapter 4: Threads. Operating System Concepts 9 th Edition

Lecture 7: Signals and Events. CSC 469H1F Fall 2006 Angela Demke Brown

UNIT 6 SIGNALS AND DAEMON PROCESSES

Technical Document Series. POSIX Signal Handling in Java

Signal types (some of them) Networks and Operating Systems ( ) Chapter 5: Memory Management. Where do signals come from?

Introduction. Interprocess communication. Terminology. Shared Memory versus Message Passing

Recitation Processes, Signals,UNIX error handling

Concurrent Processes. CS 475, Spring 2018 Concurrent & Distributed Systems

Processes & Threads. (Chapter 3) CS 4410 Operating Systems. [R. Agarwal, L. Alvisi, A. Bracy, M. George, E. Sirer, R. Van Renesse]

Concurrency Problems Signals & Synchronization Semaphore Mutual Exclusion Critical Section Monitors

PROCESS CONTROL BLOCK TWO-STATE MODEL (CONT D)

Other Interprocess communication (Chapter 2.3.8, Tanenbaum)

CSE410 Operating Systems Spring 2018 Project 1: Introduction to Unix/Linux Signals

Lecture 4. Introduction to Unix Processes. Introduction to Systems Programming: Processes and Signals

void (*)(int) NAME signal: signal.h - description of signals SYNOPSIS #include <signal.h>

Chapter 5. TCP Client-Server

Operating Systemss and Multicore Programming (1DT089)

CSCE Operating Systems Interrupts, Exceptions, and Signals. Qiang Zeng, Ph.D. Fall 2018

Last Class. System Calls, Kernel Mode, and Process Implementation. Processes. Today. Operating Systems 9/11/2018 CSC 256/456 1

Signals and Signal Handling - Part 2

A read or write being atomic means that its effect is as if it happens instantaneously.

Transcription:

Signals! 1 Goals of this Lecture! Help you learn about: Sending signals Handling signals and thereby How the OS exposes the occurrence of some exceptions to application processes How application processes can control their behavior in response to those exceptions 2 1

Outline! 1. Unix Process Control 2. Signals 3. Sending Signals 4. Handling Signals 5. Alarms 6. Children and signals 7. Conclusion! 3 Unix Process Control! command Ctrl-c Non-Existing Process command & kill 2 pid Running Foreground Process fg kill 2 pid Running Background Process Ctrl-z fg Stopped Background Process kill -20 pid bg 4 2

Process Control Implementation! Exactly what happens when you: Type Ctrl-c? Keystroke generates interrupt! OS handles interrupt OS sends a 2/SIGINT signal! Type Ctrl-z? Keystroke generates interrupt! OS handles interrupt OS sends a 20/SIGTSTP signal! Recall Exceptions and Processes lecture 5 Process Control Implementation (cont.)! Exactly what happens when you: Issue a kill sig pid command? kill command executes trap! OS handles trap OS sends a sig signal to the process whose id is pid! Issue a fg or bg command? fg or bg command executes trap! OS handles trap OS sends a 18/SIGCONT signal (and does some other things too!) Recall Exceptions and Processes lecture 6 3

Outline! 1. Unix Process Control 2. Signals! 3. Sending Signals 4. Handling Signals 5. Alarms 6. Children and signals 7. Conclusion! 7 Definition of Signal! Signal: A notification of an event Exception occurs (interrupt, trap, fault, or abort) Context switches to OS OS sends signal to application process Sets a bit in a vector indicating that a signal of type X occurred When application process regains CPU, default action for that signal executes Can install a signal handler to change action (Optionally) Application process resumes where it left off Process movl pushl call f addl movl... void handler(int isig) { signal! 8 4

Examples of Signals! User types Ctrl-c Interrupt occurs Context switches to OS OS sends 2/SIGINT signal to application process Default action for 2/SIGINT signal is terminate Process makes illegal memory reference Fault occurs Context switches to OS OS sends 11/SIGSEGV signal to application process Default action for 11/SIGSEGV signal is terminate 9 Outline! 1. Unix Process Control 2. Signals 3. Sending Signals! 4. Handling Signals 5. Alarms 6. Children and signals 7. Conclusion! 10 5

Sending Signals via Keystrokes! Three signals can be sent from keyboard: Ctrl-c à 2/SIGINT signal Default action is terminate Ctrl-z à 20/SIGTSTP signal Default action is stop until next 18/SIGCONT Ctrl-\ à 3/SIGQUIT signal Default action is terminate 11 Sending Signals via Commands! kill Command kill -signal pid Send a signal of type signal to the process with id pid No signal type name or number specified => sends 15/SIGTERM signal Default action for 15/SIGTERM is terminate Editorial: Better command name would be sendsig Examples kill 2 1234 kill -SIGINT 1234 Same as pressing Ctrl-c if process 1234 is running in foreground 12 6

Sending Signals via Function Calls! raise() int raise(int isig); Commands OS to send a signal of type isig to current process Returns 0 to indicate success, non-0 to indicate failure Example int iret = raise(sigint); /* Process commits suicide. */ assert(iret!= 0); /* Shouldn't get here. */ 13 Sending Signals via Function Calls! kill() int kill(pid_t ipid, int isig); Sends a isig signal to the process whose id is ipid Equivalent to raise(isig) when ipid is the id of current process Editorial: Better function name would be sendsig() Example pid_t ipid = getpid(); /* Process gets its id.*/ int iret = kill(ipid, SIGINT); /* Process sends itself a assert(iret!= 0); SIGINT signal (commits suicide) */ 14 7

Outline! 1. Unix Process Control 2. Signals 3. Sending Signals 4. Handling Signals! 5. Alarms 6. Children and signals 7. Conclusion! 15 Handling Signals! Each signal type has a default action For most signal types, default action is terminate A program can install a signal handler to change action of (almost) any signal type 16 8

Uncatchable Signals! Special cases: A program cannot install a signal handler for signals of type: 9/SIGKILL Default action is terminate 19/SIGSTOP Default action is stop until next 18/SIGCONT 17 Installing a Signal Handler! signal() sighandler_t signal(int isig, sighandler_t pfhandler); Installs function pfhandler as the handler for signals of type isig pfhandler is a function pointer: typedef void (*sighandler_t)(int); Returns the old handler on success, SIG_ERR on error After call, (*pfhandler) is invoked whenever process receives a signal of type isig 18 9

Installing a Handler Example 1! Program testsignal.c: #define _GNU_SOURCE /* Use modern handling style */ #include <stdio.h> #include <assert.h> #include <signal.h> static void myhandler(int isig) { printf(in myhandler with argument %d\n, isig); 19 Installing a Handler Example 1 (cont.)! Program testsignal.c (cont.): int main(void) { void (*pfret)(int); pfret = signal(sigint, myhandler); assert(pfret!= SIG_ERR); printf(entering an infinite loop\n); for (;;) ; return 0; 20 10

Installing a Handler Example 2! Program testsignalall.c: #define _GNU_SOURCE #include <stdio.h> #include <assert.h> #include <signal.h> static void myhandler(int isig) { printf(in myhandler with argument %d\n, isig); 21 Installing a Handler Example 2 (cont.)! Program testsignalall.c (cont.): int main(void) { void (*pfret)(int); pfret = signal(sighup, myhandler); /* 1 */ pfret = signal(sigint, myhandler); /* 2 */ pfret = signal(sigquit, myhandler); /* 3 */ pfret = signal(sigill, myhandler); /* 4 */ pfret = signal(sigtrap, myhandler); /* 5 */ pfret = signal(sigabrt, myhandler); /* 6 */ pfret = signal(sigbus, myhandler); /* 7 */ pfret = signal(sigfpe, myhandler); /* 8 */ pfret = signal(sigkill, myhandler); /* 9 */ This call fails 22 11

Installing a Handler Example 2 (cont.)! Program testsignalall.c (cont.): /* Etc., for every signal. */ printf(entering an infinite loop\n); for (;;) ; return 0; 23 Installing a Handler Example 3! Program generates lots of temporary data Stores the data in a temporary file Must delete the file before exiting int main(void) { FILE *psfile; psfile = fopen(temp.txt, w); fclose(psfile); remove(temp.txt); return 0; 24 12

Example 3 Problem! What if user types Ctrl-c? OS sends a 2/SIGINT signal to the process Default action for 2/SIGINT is terminate Problem: The temporary file is not deleted Process terminates before remove(temp.txt) is executed Challenge: Ctrl-c could happen at any time Which line of code will be interrupted??? Solution: Install a signal handler Define a clean up function to delete the file Install the function as a signal handler for 2/SIGINT 25 Example 3 Solution! static FILE *psfile; /* Must be global. */ static void cleanup(int isig) { fclose(psfile); remove(temp.txt); exit(0); int main(void) { void (*pfret)(int); psfile = fopen(temp.txt, w); pfret = signal(sigint, cleanup); cleanup(0); /* or raise(sigint); */ return 0; /* Never get here. */ 26 13

SIG_IGN! Predefined value: SIG_IGN! Can use as argument to signal() to ignore signals int main(void) { void (*pfret)(int); pfret = signal(sigint, SIG_IGN); assert(pfret!= SIG_ERR); Subsequently, process will ignore 2/SIGINT signals 27 SIG_DFL! Predefined value: SIG_DFL! Can use as argument to signal() to restore default action! int main(void) { void (*pfret)(int); pfret = signal(sigint, somehandler); assert(pfret!= SIG_ERR); pfret = signal(sigint, SIG_DFL); assert(pfret!= SIG_ERR); Subsequently, process will handle 2/SIGINT signals using default action for 2/SIGINT signals ( terminate ) 28 14

Outline! 1. Unix Process Control 2. Signals 3. Sending Signals 4. Handling Signals 5. Alarms! 6. Children and signals 7. Conclusion! 29 Alarms! alarm() unsigned int alarm(unsigned int uisec); Sends 14/SIGALRM signal after uisec seconds Cancels pending alarm if uisec is 0 Uses real time, alias wall-clock time! Time spent executing other processes counts Time spent waiting for user input counts Return value is irrelevant for our purposes Used to implement time-outs 30 15

Alarm Example! Program testalarmtimeout.c: #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <signal.h> #include <unistd.h> static void myhandler(int isig) { printf(\nsorry. You took too long.\n); exit(exit_failure); 31 Alarm Example (cont.)! Program testalarmtimeout.c (cont.): int main(void) { int i; sigset_t sset; Safe, but shouldn t be necessary /* Make sure SIGALRM signals are not blocked. */ sigemptyset(&sset); sigaddset(&sset, SIGALRM); sigprocmask(sig_unblock, &sset, NULL); 32 16

Alarm Example (cont.)! Program testalarmtimeout.c (cont.): signal(sigalrm, myhandler); printf(enter a number: ); alarm(5); scanf(%d, &i); alarm(0); printf(you entered the number %d.\n, i); return 0; 33 Outline! 1. Unix Process Control 2. Signals 3. Sending Signals 4. Handling Signals 5. Alarms 6. Children and signals! 7. Conclusion! 34 17

Handling Child Process Exit! Parent process runs its own code after fork Foreground process: Parent calls wait() Child process exits, shell handles next command Background process: Shell handles next command Child process exits When does zombie get harvested? 35 Solution: Signal Child Exit! Once child exits OS sends SIGCHLD to parent process Parent s signal handler calls wait() What happens if multiple children exit? Call wait() too few times à zombies Call wait() too many times à parent blocks Solution: waitpid() with WNOHANG Harvest if exist, return immediately otherwise Safe to call within do..while() loop 36 18

Solution: Signal Child Exit! Once child exits OS sends SIGCHLD to parent process Parent s signal handler calls wait() What happens if multiple children exit Call wait() too few times à zombies Call wait() too many times à parent blocks Solution: waitpid() with WNOHANG Harvest if exist, return immediately otherwise 37 Predefined Signals! List of the predefined signals: $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX See Bryant & O Hallaron book for default actions, triggering exceptions Application program can define signals with unused values 38 19

Summary! Signals A signal is an asynchronous event Sending signals raise() or kill() sends a signal Catching signals signal() installs a signal handler! Most signals are catchable! Beware of race conditions! sigprocmask() blocks signals in any critical section of code Signals of type x automatically are blocked while handler for type x signals is running 39 Summary (cont.)! Alarms Call alarm() to deliver 14/SIGALRM signals in real/wall-clock time! Alarms can be used to implement time-outs! Interval Timers Call setitimer() to deliver 27/SIGPROF signals in virtual/cpu time! Interval timers are used by execution profilers! 40 20

Summary (cont.)! For more information: Bryant & O Hallaron, Computer Systems:! A Programmer s Perspective, Chapter 8 41 Interval Timers! setitimer() int setitimer(int iwhich, const struct itimerval *psvalue, struct itimerval *psoldvalue); Sends 27/SIGPROF signal continually psvalue specifies timing psoldvalue is irrelevant for our purposes Uses virtual time, alias CPU time! Time spent executing other processes does not count Time spent waiting for user input does not count Returns 0 iff successful Used by execution profilers 42 21

Interval Timer Example! Program testitimer.c: #define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <signal.h> #include <sys/time.h> static void myhandler(int isig) { printf(in myhandler with argument %d\n, isig); 43 Interval Timer Example (cont.)! Program testitimer.c (cont.): int main(void) { struct itimerval stimer; signal(sigprof, myhandler); 44 22

Interval Timer Example (cont.)! Program testitimer.c (cont.): /* Send first signal in 1 second, 0 microseconds. */ stimer.it_value.tv_sec = 1; stimer.it_value.tv_usec = 0; /* Send subsequent signals in 1 second, 0 microseconds intervals. */ stimer.it_interval.tv_sec = 1; stimer.it_interval.tv_usec = 0; setitimer(itimer_prof, &stimer, NULL); printf(entering an infinite loop\n); for (;;) ; return 0; 45 Race Conditions and Critical Sections!! Race Condition! A flaw in a program whereby the correctness of the program is critically dependent on the sequence or timing of events beyond the program s control Critical Section! A part of a program that must execute atomically (i.e. entirely without interruption, or not at all) 46 23

Race Condition Example! Race condition example: int ibalance = 2000; static void addbonus(int isig) { ibalance += 50; int main(void) { signal(sigint, addbonus); ibalance += 100; To save slide space, we ignore error handling here and subsequently 47 Race Condition Example (cont.)! Race condition example in assembly language int ibalance = 2000; void addbonus(int isig) { ibalance += 50; int main(void) { signal(sigint, addbonus); ibalance += 100; movl ibalance, %ecx addl $50, %ecx movl %ecx, ibalance movl ibalance, %eax addl $100, %eax movl %eax, ibalance Let s say the compiler generates that assembly language code 48 24

Race Condition Example (cont.)! (1) main() begins to execute int ibalance = 2000; void addbonus(int isig) { movl ibalance, %ecx ibalance += 50; addl $50, %ecx movl %ecx, ibalance int main(void) { signal(sigint, addbonus); ibalance += 100; movl ibalance, %eax addl $100, %eax movl %eax, ibalance 2000 2100 49 Race Condition Example (cont.)! (2) SIGINT signal arrives; control transfers to addbonus() int ibalance = 2000; void addbonus(int isig) { movl ibalance, %ecx ibalance += 50; addl $50, %ecx movl %ecx, ibalance int main(void) { signal(sigint, addbonus); ibalance += 100; movl ibalance, %eax addl $100, %eax movl %eax, ibalance 2000 2050 2050 2000 2100 50 25

Race Condition Example (cont.)! (3) addbonus() terminates; control returns to main() int ibalance = 2000; void addbonus(int isig) { movl ibalance, %ecx ibalance += 50; addl $50, %ecx movl %ecx, ibalance int main(void) { signal(sigint, addbonus); ibalance += 100; movl ibalance, %eax addl $100, %eax movl %eax, ibalance Lost $50!!! 2000 2050 2050 2000 2100 2100 51 Critical Sections! Solution: Must make sure that critical sections of code are not interrupted int ibalance = 2000; void addbonus(int isig) { ibalance += 50; int main(void) { signal(sigint, addbonus); ibalance += 100; Critical section Critical section 52 26

Blocking Signals! Blocking signals To block a signal is to queue it for delivery at a later time Differs from ignoring a signal Each process has a signal mask in the kernel OS uses the mask to decide which signals to deliver User program can modify mask with sigprocmask() 53 Function for Blocking Signals! sigprocmask() int sigprocmask(int ihow, const sigset_t *psset, sigset_t *psoldset); psset: Pointer to a signal set psoldset: (Irrelevant for our purposes) ihow: How to modify the signal mask SIG_BLOCK: Add psset to the current mask SIG_UNBLOCK: Remove psset from the current mask SIG_SETMASK: Install psset as the signal mask Returns 0 iff successful Functions for constructing signal sets sigemptyset(), sigaddset(), 54 27

Blocking Signals Example! int main(void) { sigset_t sset; signal(sigint, addbonus); sigemptyset(&sset); sigaddset(&sset, SIGINT); sigprocmask(sig_block, &sset, NULL); ibalance += 100; sigprocmask(sig_unblock, &sset, NULL); Block SIGINT signals Critical section Unblock SIGINT signals 55 Blocking Signals in Handlers! How to block signals when handler is executing? While executing a handler for a signal of type x, all signals of type x are blocked automatically When/if signal handler returns, block is removed void addbonus(int isig) { ibalance += 50; SIGINT signals automatically blocked in SIGINT handler 56 28