2016-03-21 77 views
2

我想更好地理解UNIX操作系統中的信號和中斷機制。據我瞭解,中斷用於CPU和操作系統內核之間的通信。信號用於在OS內核和OS進程之間進行通信。執行程序並殺死它時的信號和中斷

我很難理解在某些情況下發生了什麼,並且發現哪些信號和中斷正在被調用以及何時發生。

例如,執行程序並使用kill pid將其殺死時。在shell中輸入程序的名稱時會觸發哪些中斷(例如pluma,然後是kill pluma_id)?

我試過在調用kill命令時使用strace。執行的第一個命令是:execve ("/bin/kill", ["kill", "10057"], [/* 47 cars */]) = 0

據我所知,這是一個標準的系統調用,但我無法理解哪些中斷被觸發,哪些信號在發生鍵盤按鍵事件時發送。我也無法理解哪些信號在使用kill系統調用終止時被髮送到進程(可能根本沒有發送?)。

什麼是發生在以下情形事件(信號,sisals和中斷)的全序列:

  1. 在shell中鍵入plume
  2. 點擊回車鍵執行pluma
  3. 執行kill pluma_id

(簡要說明綽綽有餘,只是瞭解一般流程)

回答

2

打字羽在外殼發生

鍵盤中斷。 CPU接收鍵盤中斷,執行處理程序,讀取鍵碼和掃描代碼等。/ dev/input/event *中生成的事件將由終端仿真器程序讀取,或將由您的程序轉發給程序輸入系統。涉及您的桌面環境,Xserver等。

擊中輸入鍵和執行pluma

同上。在收到輸入密鑰後,shell將fork()和exec()pluma。

執行殺pluma_id

殼牌工藝使得殺滅()系統調用。我的kill手冊中提到「kill的默認信號是TERM,使用-l或-L列出可用信號」。進行系統調用時會有上下文切換。覈實權限後,內核會找到指定進程ID的進程表條目。它將更新信號編號pluma收到的PTE過程的信號掩碼。

因此信號被傳遞給過程。現在該過程需要處理信號。如果它爲特定的信號安裝了一個信號處理程序,處理程序會被調用。否則內核會採用默認的handeler/action。在unix系統中,進程的信號處理通常發生在上下文切換期間,即當進程切換回用戶上下文或再次調度進程時。

Maurice J. Bach設計的UNIX操作系統對整個過程進行了非常簡單和詳細的說明。你可能想看看它。

1

使用的kill(該程序)下面是一個kill()系統調用,並且此係統調用總是獲取一個信號編號作爲參數。

命令kill只是假定某些信號是默認發送的,例如:TERM信號。你看strace輸出是程序調用。您應該更深入地瞭解跟蹤,並找到系統調用的調用方式。然後你會看到信號的數值。

你應該看看我認爲的kill程序文檔。它提到了默認情況下發送給進程的信號,如果你沒有明確指定信號的話。如果您願意,它還會告訴您如何發送特定信號。