Linux 訊號signal處理函式

2022-08-27 13:48:09 字數 2654 閱讀 9909

alarm(設定訊號傳送鬧鐘)

相關函式 signal,sleep

表頭檔案

#include

定義函式 unsigned int alarm(unsigned int

seconds);

函式說明

alarm()用來設定訊號sigalrm在經過引數seconds指定的秒數後傳送給目前的程序。如果引數seconds

為0,則之前設定的鬧鐘會被取消,並將剩下的時間返回。

返回值返回之前鬧鐘的剩餘秒數,如果之前未設鬧鐘則返回0。

範例#include

#include

void handler()

main()

}執行 sleep 1 ...

sleep 2 ...

sleep 3 ...

sleep 4 ...

sleep 5 ...

hello

sleep 6 ...

kill(傳送訊號給指定的程序)

相關函式 raise,signal

表頭檔案 #include

#include

定義函式 int kill(pid_t pid,int sig);

函式說明 kill()可以用來送引數sig指定的訊號給引數pid指定的程序。引數pid有幾種情況:

pid>0 將訊號傳給程序識別碼為pid 的程序。

pid=0 將訊號傳給和目前程序相同程序組的所有程序

pid=-1 將訊號廣播傳送給系統內所有的程序

pid<0 將訊號傳給程序組識別碼為pid絕對值的所有程序

引數sig代表的訊號編號可參考附錄d

返回值 執行成功則返回0,如果有錯誤則返回-1。

錯誤** einval 引數sig 不合法

esrch 引數pid 所指定的程序或程序組不存在

eperm 許可權不夠無法傳送訊號給指定程序

範例 #include

#include

#include

#include

main()

else

}執行 sen signal to child process(3170)

hi i am child process!

child process receive signal 6

表頭檔案 #include

定義函式 void (*signal(int signum,void(* handler)(int)))(int);

函式說明 signal()會依引數signum

指定的訊號編號來設定該訊號的處理函式。當指定的訊號到達時就會跳轉到引數handler指定的函式執行。如果引數handler不是函式指標,則必須是下列兩個常數之一:

sig_ign 忽略引數signum指定的訊號。

sig_dfl 將引數signum 指定的訊號重設為核心預設的訊號處理方式。

關於訊號的編號和說明,請參考附錄d

返回值返回先前的訊號處理函式指標,如果有錯誤則返回sig_err(-1)。

附加說明在訊號發生跳轉到自定的handler處理函式執行後,系統會自動將此處理函式換回原來系統預設的處理方式,如果要改變此操作請改用sigaction()。

範例 參考alarm()或raise()。

sigpending(查詢被擱置的訊號)

相關函式 signal,sigaction,sigprocmask,sigsuspend

表頭檔案 #include

定義函式 int sigpending(sigset_t *set);

函式說明 sigpending()會將被擱置的訊號集合由引數set指標返回。

返回值執 行成功則返回0,如果有錯誤則返回-1。

錯誤** efault 引數set指標位址無法訪問

eintr 此呼叫被中斷。

sigprocmask(查詢或設定訊號遮罩)

相關函式 signal,sigaction,sigpending,sigsuspend

表頭檔案 #include

定義函式 int sigprocmask(int how,const sigset_t *set,sigset_t *

oldset);

函式說明 sigprocmask()可以用來改變目前的訊號遮罩,其操作依引數how來決定

sig_block 新的訊號遮罩由目前的訊號遮罩和引數set 指定的訊號遮罩作聯集

sig_unblock 將目前的訊號遮罩刪除掉引數set指定的訊號遮罩

sig_setmask 將目前的訊號遮罩設成引數set指定的訊號遮罩。

如果引數oldset不是null指標,那麼目前的訊號遮罩會由此指標返回。

返回值 執行成功則返回0,如果有錯誤則返回-1。

錯誤** efault 引數set,oldset指標位址無法訪問。

eintr 此呼叫被中斷

sleep(讓程序暫停執行一段時間)

相關函式 signal,alarm

表頭檔案 #include

定義函式 unsigned int sleep(unsigned int seconds);

函式說明 sleep()會令目前的程序暫停,直到達到引數seconds 所指定的時間,或是被訊號所中斷。

返回值 若程序暫停到引數seconds 所指定的時間則返回0,若有訊號中斷則返回剩餘秒數。

Signal訊號處理

在goahead的linux模組main.c 檔案中,main函式中出現了以下三個語句 signal sigpipe,sig ign signal sigint,siginthandler signal sigterm,siginthandler 這三條語句與網路訊號有關。在這裡做咯記錄。1.訊號概...

Linux 訊號signal處理機制 四

4 alarm和 setitimer系統呼叫 系統呼叫alarm的功能是設定乙個定時器,當定時器計時到達時,將發出乙個訊號給程序。該呼叫的宣告格式如下 unsigned int alarm unsigned int seconds 在使用該呼叫的程序中加入以下標頭檔案 include 系 統呼叫al...

linux 訊號 signal函式

include include include include include include include signal 函式有iso c定義,因為iso c 不涉及多執行緒 程序組以及終端i o等,所以它對訊號的定義非常含糊,以至於對於unix系統而言毫無作用。最好用sigactioan來代替...