Example of Signals by `sigaction` in Unix
- November 24, 2019
- Liu, An-Chi 劉安齊
Unix 中 processes 之間溝通有很多種,本篇介紹 signal 的簡易使用。可以先閱讀 Beej 的介紹。顧名思義,signal 就是程序發送和接受訊號,例如我們在使用 Shell 的時候,之所以 Ctrl-C
可以中斷程式執行,就是因為 Shell 捕捉到 Ctrl-C
發送的 SIGINT
訊號,知道有一個 interrupt signal,所以將程式中斷。
發送 signal 可以用 sigaction()
或 signal()
,不過建議使用 sigaction
因為比較新,詳細差別可以看 Stack Overflow 這篇 「What is the difference between sigaction and signal?」。
如果想觸發 signal,可以用 kill()
或 sigqueue()
,差別在於後者僅限 Linux,但後者可以藉由傳送 siginfo
加一些資訊在 signal 中。此外一些 system call 本身也會觸發 signal,例如如果嘗試 send()
到不存在的 socket
,就會觸發 SIGPIPE
。