1.
函式說明
:
kill
和raise
是用來傳送訊號的
:
kill
把訊號傳送給程序或程序組
,它不僅可以中止程序,也可以向程序傳送其他訊號
;
raise
把訊號傳送給(程序
)自身.
它們的原型如下
:
#include
#include
int kill(pid_t pid, /*
指明要傳送的訊號程序號
*/
int signo);/*
訊號*/
int raise(int signo);/*
訊號*/
成功則返回
0, 出錯則返回
-1
從原型上可以看出
, raise
函式是可以通過
kill
實現的.
raise(signo);
等價於:
kill(getpid(), signo);
2. 引數說明
pid引數:
kill
函式中的
pid引數
, 它有以下
4種情況
:
pid > 0:
將該訊號傳送給程序id為
pid的程序
.
pid == 0:
將該訊號傳送給與傳送程序屬於同一程序組的所有程序
(不包括核心程序和
init
程序).
此時,
傳送程序必須具有向這些程序傳送訊號的許可權
.
pid < 0:
將該訊號發給其程序組
id等於
pid絕對值的所有程序
(不包括核心程序和
init
程序).
此時,
傳送程序必須具有向這些程序傳送訊號的許可權
.
pid == -1:
將該訊號傳送給傳送程序有許可權向它們傳送訊號的系統上的所有程序
.(不包括核心程序和
init
程序).
signo引數:
posix.1
將編號為
0的訊號定義為空訊號
. 如果
signo
引數是0,
則kill
仍執行正常的錯誤檢查
, 但不傳送訊號
. 這被用來確定乙個程序是否存在
.
訊號遮蔽字就是程序中被阻塞的訊號集
, 這些訊號不能傳送給該程序
, 它們在該程序中被"遮蔽
"了. 後面我們會提到
, 實際上它們是被阻塞了
.
2. 訊號遮蔽函式
:
#include
int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oset);
成功則返回
0, 出錯則返回
-1.
sigprocmask
函式有3
個引數:
how:
修改訊號遮蔽字的方式
.
set:
把這個訊號集設為新的當前訊號遮蔽字
. 如果為
null
則不改變
.
oset:
儲存程序舊的訊號遮蔽字
. 如果為
null
則不儲存
.
引數中的
how可以取3個值
:
sigprocmask
中的how
引數how 說明
sig_block
修改後,
該程序新的訊號遮蔽字是其當前遮蔽字和
set指向的訊號集的並集
.
sig_unblock
修改後,
該程序新的訊號遮蔽字是其當前遮蔽字和
set指向的訊號集的補集的交集
.
sig_setmask
修改後,
該程序新的訊號遮蔽字將被
set指向的訊號集的值代替
另外要說的是
, sigprocmask
只為單執行緒定義的,
0 給主人留下些什麼吧!~~
訊號相關函式彙總
1.函式說明 kill 和raise 是用來傳送訊號的 kill 把訊號傳送給程序或程序組 它不僅可以中止程序,也可以向程序傳送其他訊號 raise 把訊號傳送給 程序 自身.它們的原型如下 include include int kill pid t pid,指明要傳送的訊號程序號 int sig...
linux 訊號相關函式 一
訊號共性 簡單 不能攜帶大量資訊 滿足條件才傳送 訊號的特質 訊號是軟體層面的 中斷。一旦訊號產生,無論程式執行到什麼位置,必須停止執行,處理訊號,處理結束,再繼續執行後續指令。所有訊號的產生及處理都是 由 核心完成的。產生訊號 1.按鍵產生 如 ctrl c 2.系統呼叫產生 如 kill 3.軟...
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...