Overview

What is Signal?

我們可以把 signal 想成一個「緊急通知」,當 process 收到 signal,他會先暫停他正在運行的 instruction,並且先執行完收到該 signal 我們設定要做的事後才繼續執行程式

Signal vs. Interrupt

  • Signal 由 OS 發出,對象是特定 Process
  • Interrupt 則是由 Hardware 發向 CPU,kernel 收到 Interrupt 會就會分析這個 Interrupt 並且對對應的 Process 發送 Signal

具體來說,每個 Hardware 會連接到 PIC (Programmable Interrupt Controller),當 Hardware 想要傳送 Interrupt,會對 PIC 傳送 IRQ (Interrupt Request),PIC 會進行一些處理後通知 CPU 這個 Interrupt,CPU 收到後會分析其來源然後對特定的 Process 傳送特定的 Signal

Synchronous vs. Asynchronous

Synchronous Signal

這是因為我們 Process 執行的某個 Instruction 出錯所以產生的 Signal

舉例來說

  • 如果我們除以 0,就會傳送 SIGFPE(8)
  • 如果 segmentation fault,就會傳送 SIGSEGV(11)

Asynchronous Signal

這是外部傳來的 Signal,和我們這個 Process 本身無關,我們無法預測什麼時候會收到 Asynchronous Signal

舉例來說,Ctrl + C 便是 asynchronous signal

不同 OS 定義的 signal 和其 behavior 會有不同