概念
訊號是系統響應某些狀況而產生的事件,程序在接受到訊號時會採取相應的行動。
(非常像微控制器的中斷),
訊號可以明確地由乙個程序產生傳送到另外乙個程序,用這種辦法傳遞資訊或協調操作行為。
程序可以生成訊號、捕捉並相應訊號或遮蔽訊號。
訊號的名稱
是在標頭檔案
signal.h
裡定義。下面我列出一部分,如下:
———————————————————————————
訊號名稱 說明
———————————————————————————
sigalrm
警告鐘
sighup
系統結束通話
sigint
終端中斷
sigkill
停止程序(此訊號不能被忽略或捕獲)
sigpipe
向沒有讀者的管道寫資料
sigquit
終端退出
sigterm 終止
———————————————————————————
如果程序接收到上表中的某個訊號但
實際並沒有安排捕捉它,程序就會立刻終止。
函式#include
void (*signal(int sig, void (*func) (int) ))(int);
這個函式看起來很複雜,但使用卻是很簡單的。第乙個引數
sig就是準備捕獲或遮蔽的訊號
(看上表
),接收到指定訊號時將呼叫
func
函式處理。
例項1—處理sigint
(終端中斷)訊號
ctrlc.c檔案
#include
#include
#include
void ouch(int sig)
int main() }
這個程式就是截獲組合鍵
ctrl+c
產生的sigint
訊號。沒有訊號出現時,它每隔一秒就會輸出乙個訊息。第一次按下
ctrl+c
產生的sigint
訊號,
程式會呼叫
ouch
函式,輸出資訊,同時,恢復
sigint
為預設行為(即按下
ctrl+c
組合鍵後即結束執行),那麼第二次按下
ctrl+c
組合鍵時,程式就結束了執行。
執行效果見下圖:
例項2—模仿鬧鐘行為
函式1#include
#include
int kill (pid_t pid, int sig);
kill
函式的作用是把
sig訊號傳送給標識為
pid的程序,
成功時返回
「0」,失敗時返回
「-1」.
要想傳送乙個訊號,兩個程序(傳送和接受兩方)必須擁有同樣的使用者
id,,
就是說,
你只能向自己的另乙個程序傳送訊號。但是超級使用者可以向任何程序傳送訊號。
函式2#include
unsigned int alarm (unsigned int seconds ) ;
alarm
函式是在
seconds
秒後安排傳送乙個
sigalarm
訊號。若
seconds為0
,表示將取消全部已經設定的鬧鐘請求。每乙個程序只有乙個可用的鬧鐘。
它的返回值是
前乙個鬧鐘鬧響之前還需經過的剩餘秒數。呼叫失敗則返回「-1」.
#include
#include
#include
#include
static int alarm_fired = 0;
void ding(int sig)
alarm_fired = 1;
int main()
int pid;
printf("鬧鐘已啟動。
\n");
/*子程序休眠
5秒後向父程序傳送
sigalarm
訊號,然後結束程序*/
if((pid = fork()) == 0)
sleep(5);
kill(getppid(), sigalrm);
exit(0);
/*父程序執行的內容*/
printf("5秒後鬧鐘啟動。
\n");
(void) signal(sigalrm, ding);
/*將執行的程式掛起,直到接收到訊號為止*/
pause();//讓程序暫停知道訊號出現
if (alarm_fired)
printf("ding!\n");
printf("done\n");
exit(0);
程式通過
fork
啟動乙個新程序,這個
子程序休眠5
秒後向自己的父程序傳送乙個
sigalarm
訊號。父程序在安排好捕捉
sigalarm
訊號後暫停執行,直到接收到乙個訊號為止。
執行結果見下圖:
Linux C程序與多執行緒入門 3 訊號
訊號是系統響應某些狀況而產生的事件,程序在接受到訊號時會採取相應的行動。訊號可以明確地由乙個程序產生傳送到另外乙個程序,用這種辦法傳遞資訊或協調操作行為。程序可以生成訊號 捕捉並相應訊號或遮蔽訊號。訊號的名稱是在標頭檔案signal.h裡定義。下面我列出一部分,如下 訊號名稱 說明 sigalrm ...
Linux (C)多執行緒學習(入門)
下面兩個仁兄總結非常好。總結比較好 比較具體 例子 主要學習乙個例子 test1.c created on 2016年7月26日 author andy cong 利用多執行緒與有名管道技術,實現兩個程序之間傳送即時訊息,實現聊天功能。mkfifo xx 新建乙個管道xx 兩個程式test1 tes...
linux C 多執行緒
標頭檔案 include 執行緒建立 pthread create 執行緒退出 pthread exit 互斥鎖 pthread mutex init pthread mutex lock pthread mutex unlock void thread function void arg if 0...