linux 訊號相關函式 一

2021-10-02 18:28:51 字數 2200 閱讀 1228

訊號共性:

簡單、不能攜帶大量資訊、滿足條件才傳送

訊號的特質:

訊號是軟體層面的 中斷。一旦訊號產生,無論程式執行到什麼位置,必須停止執行,處理訊號,處理結束,再繼續執行後續指令。

所有訊號的產生及處理都是 由  核心完成的。

產生訊號:

1.按鍵產生  如:ctrl+c

2.系統呼叫產生 如:kill

3.軟體條件產生  如:定時器 alarm

4.硬體異常產生  如:非法訪問記憶體(段錯誤)、除0

5.命令產生  如:kill命令

概念:未決:產生與遞達之間狀態

遞達:產生並且送達到程序、直接被核心處理掉

訊號處理方式:執行預設處理動作(終止程序、忽略訊號、暫停程序、繼續執行、終止生成core檔案檢視程序死亡原因)

、忽略、捕捉(自定義)

阻塞訊號集(訊號遮蔽字):本質:位圖。用來記錄訊號的遮蔽狀態。一旦被遮蔽的訊號,在解除遮蔽前,一直處於未決狀態。

未決訊號集: 本質:位圖。用來記錄訊號的處理狀態。該訊號集中的訊號表示,已經產生,但尚未被處理。

可以操作阻塞訊號集 來影響未決訊號集   未決訊號集不允許操作

訊號四要素:

訊號使用之前,應先確定四要素,然後再用

訊號編號、訊號名稱、訊號對應事件、訊號預設處理動作 

kill命令和kill函式:

kill -9  -1900  (剎死 程序組號為 1900 的所有程序   程序組號同父程序號)

int kill(pid_t pid,int signum)

引數:pid:    >0:傳送訊號給指定程序

=0:傳送訊號給 跟呼叫kill函式的那個程序處於同一程序組的程序

<-1:取絕對值,傳送訊號給該絕對值所對應的程序組的所有組員

=-1:傳送訊號給,有許可權傳送的所有程序

返回值:

成功:0

失敗:-1 errno

#include#include#include#include#includeint main()

}else if(pid==0)

return 0;

}

alarm 函式:

每個程序有且只有唯一 乙個定時器

定時傳送sigalrm 給當前程序。

unsigned int alarm(unsigned int seconds);

seconds:定時秒數

返回值:上次定時剩餘時間

無錯誤現象

alarm(0)取消鬧鐘

time 命令 :檢視程式執行時間。 實際時間 = 使用者時間+核心時間+等待時間  --》優化瓶頸 io

//測試一秒 數數

#include#includeint main()

return 0;

}

setitimer函式:

int setitimer(int which, const struct itimerval *new_value,struct itimerval *old_value);

引數:which:    itimer_real: 採用自然計時 --》 sigalrm

itimer_virtual: 採用使用者計時 --》si**talrm

itimer_prof : 採用核心 +使用者空間計時 --》sigprof

new_value:定數秒數

型別: struct itimervalit_interval;

struct timevalit_value;

old_value:傳出引數,上次定時剩餘時間。

e.g:

struct timeval ner_t;

struct timeval old_t;

new_t.it_interval.tv_sec=1;

new_t.it_interval.tv_usec=0;

new_t.it_value.tv_sec=0;

new_t.it_value.tv_usec=0;

setitimer(&new_t,&old_t)

返回值:

成功:0

失敗:-1 errno

其他幾個發訊號函式:

int raise(int sig)

void abort(void)

Linux訊號相關函式示例

程式在執行時,系統所傳來的指示。你在家呆著有人來敲門 linux下常見訊號 1 sighup 2 sigint 3 sigquit 4 sigill 5 sigtrap 6 sigabrt 7 sigbus 8 sigfpe 9 sigkill 10 sigusr1 11 sigse 12 sigu...

Linux訊號集相關函式操作

在linux的程序中可以接收到各種的訊號,並且如果你不對訊號進行處理,linux中的程序就會採用預設的處理方式處理,比如ctrl c的訊號,程序對它的處理就是終止程序的執行。在linux中,我們也可以在程序中遮蔽掉某些訊號,使程序不去處理這些訊號,但其中的sigkill和sigstop是不能被阻塞的...

訊號相關函式彙總

1.函式說明 kill 和raise 是用來傳送訊號的 kill 把訊號傳送給程序或程序組 它不僅可以中止程序,也可以向程序傳送其他訊號 raise 把訊號傳送給 程序 自身.它們的原型如下 include include int kill pid t pid,指明要傳送的訊號程序號 int sig...