標籤:時鐘 忽略 相關 comm 中斷 使用 鬧鐘 tty sig
各位看官們,大家好,上一回中咱們說的是處理序間通訊的範例。這一回咱們說的範例是:使用訊號進行處理序間通訊。閑話休提,言歸正轉。
讓我們一起talk C栗子吧!
我們在上一回中提到過進程之間通訊須要解決的三個問題,時間不長。我想大家都記得。今天我們就來解決第一個問題:進程之間怎樣進行通訊。
訊號的概念
在解決這個問題前。我們先介紹一下訊號。訊號是Unix/Linux系統提供的一種機制,它本質上一種軟體中斷。
訊號為我們提供了一種非同步事件處理方法。當進程收到訊號時就會採取某種操作。比如,當進程收到終止訊號(SIGKILL)時就會終止進程。這點我們在介紹進程結束時做過相關的說明。
系統為訊號定義了名字,我們能夠通過名字來使用訊號,訊號名字是以SIG開頭的字串。比方。SIGKILL,SIGINT等。
訊號的產生
要使用訊號進行進程間的通訊,首先須要產生訊號,訊號能夠通過以下幾種方式來產生:
訊號的處理
進程收到訊號後會做對應的處理,詳細有以下幾種處理方式:
明確訊號的這些知識後,我們就正式開始介紹使用訊號這樣的方式進行通訊。
我們舉一個簡單的範例進行說明。
編譯以下的程式而且執行:
int main{ int i = 0; while(i++ < 9999) { printf("i have been sleeping for %d second \n",i); sleep(1); } return 0;}
以下是程式的執行結果。請大家參考:
./s //在終端中執行編譯後的程式i have been sleeping for 1 second //程式在執行,而且輸出執行結果i have been sleeping for 2 second i have been sleeping for 3 second i have been sleeping for 4 second i have been sleeping for 5 second i have been sleeping for 6 second i have been sleeping for 7 second i have been sleeping for 8 second i have been sleeping for 9 second i have been sleeping for 10 second ^C //在終端中按下ctrl+c終止程式執行
通過上面的程式, 我們分析一下程式中進程通訊的原理:
- 把在終端中執行的程式當作進行A,終端本身當作進程B。
- 在進行B中通過按鍵給進程 A發送SIGINT訊號。
- 進程B收到該訊號後做出了響應:停止執行。我們在進程B中能夠看到進程A停止了執行。
看官們。我們後面的章回中還會舉其他進程之間通訊的範例,以便讓大家對使用訊號進行進程之間通訊有更加深入的瞭解。
各位看官。關於使用訊號進行處理序間通訊的範例咱們就講到這裡。欲知後面還有什麼範例,且聽下回分解 。
一起talk C栗子吧(第八十四回:C語言執行個體--使用訊號進行處理序間通訊一)