Commit 5c420f2
Changed files (2)
doc
lib
doc/assignment1.md
@@ -11,7 +11,58 @@ Instructions: Please answer the following questions in complete sentences. Your
An interrupt vector is a list or table of interrupts. Each interrupt has an
address to the interrupt routine to execute when the interrupt is signaled.
A trap is a way to capture a triggered signal to allow programs to respond to
- and handl the signal.
+ and handle the signal.
+
+ Signals can be sent to a particular process via the `kill` program.
+ A list of signals that can be sent are listed below:
+
+ ```bash
+ モ 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
+ 16) SIGSTKFLT 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
+ ```
+
+ Programs can also trap a signal and handle them. In the following example
+ the Ruby program is trapping the `SIGUSR1` signal to reload a configuration
+ file.
+
+ ```ruby
+ #!/usr/bin/env ruby
+
+ pid = fork do
+ Signal.trap("USR1") do
+ puts "done"
+ exit 0
+ end
+
+ loop do
+ print "."
+ sleep 1
+ end
+ end
+
+ Process.detach(pid)
+ sleep 5
+ Process.kill("USR1", pid)
+ ```
+
+ When this program is run it will print a '.' 5 times then exit
+
+ ```bash
+ モ ruby lib/sigtrap.rb
+ .....done
+ ```
1. How does a computer system with von Neumann architecture execute an instruction?
lib/sigtrap.rb
@@ -0,0 +1,17 @@
+#!/usr/bin/env ruby
+
+pid = fork do
+ Signal.trap("USR1") do
+ puts "done"
+ exit 0
+ end
+
+ loop do
+ print "."
+ sleep 1
+ end
+end
+
+Process.detach(pid)
+sleep 5
+Process.kill("USR1", pid)