Lab 10: Signals, and using sigaction

Due Monday, October 27


Unlike earlier labs, but like lab 9, the solution will be a C program rather than a series of commands.

Each process has a unique number called a Process ID (PID), and using this number, it is possible to send signals to the process. For this lab, first set up your program to send signal 2 to itself, which will terminate the program. To show this, set up your program like this:
int main(){
	// Retrieve this program's PID, using getpid
	// Send signal 2 to this process, using kill

	puts("Reached the end safe and sound!  Try again!\n");
	return 0;
}
If your program works right, it will NOT print out the message at the end. Then, modify it by installing a signal handler for signal 2, so it looks like this:
void signal_handler(int){
	puts("We're in the signal handler!\n");
}

int main(){
	// Install a handler for signal 2, so that the function above will run
	// Use the sigaction function for this
	// You'll have to make an sa_handler struct for it to use

	// Retrieve this program's PID, using getpid
	// Send signal 2 to this process, using kill

	puts("Reached the end safe and sound!  But that's what it should do now!\n");
	return 0;
}
There's a signal handler in the demo "beeper.c" from earlier in the semester, from process management. You can use this as an example of how to receive signals.

Turn in your lab by creating a file named "lab10.c" with no extension in your cs253 directory, with permissions set so that only you can view the file. Substitute a c++ file extension if your lab will only compile with c++. This assignment is worth 35 points, 5 from correct naming and permissions, and 30 from working correctly. As a reminder, you can set the permissions correctly with this line:
chmod 600 lab10.c