Disposition of a Signal

Ignore Signals

  • 收到 signal 但是忽略不管
  • SIGKILLSIGSTOP 不能被 ignore

Catch Signals

  • 我們設定一個 signal handler (一個 function),當我們收到該 signal 就會執行這個 handler
  • SIGKILLSIGSTOP 一樣不能被 catch

Apply Default Action

  • 當我們沒有特別設定,process 收到 signal 就會執行預設的 default action
  • OS 和 OS 間的 default action 可能不同

Program Start-Up Disposition

Background Process

當我們將一個 program 跑成 background process,則 SIGINTSIGQUIT 的 default action 被設為 ignore,因為我們要避免 CTRL-CCTRL-Z 誤關掉 background process

fork

會繼承 parent process 所有的 disposition,因為 fork 會複製 parent process 完整的 virtual memory,因此註冊的 signal handler 都還是可使用的狀態

exec

會將除了 ignore 外的 disposition 都重置成 default action,因為 exec 在 virtual memory 在入了全新的 text segment,所以原本的 signal handler 都沒法用了

其實也就只是把原本 catch 改成 default action


signal system call

D-SP-Ch9aca-signal