2015年4月4日 星期六

Signals in Linux Kernel

Signal 已經誕生 30 多年了,這三十年來,只有一點點微小的改變。這邊文章介紹 Linux kernel 是如何處理 signal。


什麼是 Signal - 傳遞給 process 的短訊息

Signal 是一種非常短的訊息,用來傳遞給一或多個 process,像是 facebook 的「戳一下」。通常 signal 只帶有一個數字,用來標示目前發生的 signal 種類。一般的 signal 不會帶有 arguments, a message 或者其他種類的訊息。

Signal的種類太多,數字太難記憶。所以系統裡面會有一組 SIG 開頭的 macro 來標示所有的 signal。舉例來說,SIGCHLD macro用來通知 parent process,child process 已經停止或者結束。SIGSEGV macro 通常就是所謂的 segmentation fault。

Signal 有兩個主要的目的:
  1. 用來通知 process 特定事件的發生
  2. 強制 process 執行特定的 signal handler function
當然,這兩種目的不是互斥的,通常一個 process 會混著使用。


沒有留言:

張貼留言