訊號相關函式彙總

2021-07-28 18:18:35 字數 2345 閱讀 5932

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...