Commit 5c420f2

mo khan <mo@mokhan.ca>
2021-02-08 17:18:07
answer question 1 in assignment 1
1 parent 8a3baed
Changed files (2)
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)