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

Continue reading