Disposition of a Signal
Ignore Signals
- 收到 signal 但是忽略不管
SIGKILL和SIGSTOP不能被 ignore
Catch Signals
- 我們設定一個 signal handler (一個 function),當我們收到該 signal 就會執行這個 handler
SIGKILL和SIGSTOP一樣不能被 catch
Apply Default Action
- 當我們沒有特別設定,process 收到 signal 就會執行預設的 default action
- OS 和 OS 間的 default action 可能不同
Program Start-Up Disposition
Background Process
當我們將一個 program 跑成 background process,則 SIGINT 和 SIGQUIT 的 default action 被設為 ignore,因為我們要避免 CTRL-C 和 CTRL-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