SIGNAL相關函數

#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int signum)

功能:

  • 給指定進程發送信號

參數:

  • pid:
    • pid>0:將信號傳送給進程ID爲pid的進程
    • pid=0:將信號傳送給當前所在進程組中的所有進程
    • pid=-1:將信號傳送給系統內所有進程
    • pid<-1將信號傳給指定進程組|pid|的所有進程。
  • signum:信號編號

返回值:

  • 成功返回0,失敗返回-1
#include <unistd.h>
unsigned int alarm(unsigned int seconds)

功能:

  • 在 seconds秒後,向調用進程發送一個SIGALRM信號, SIGALRM信號的默認動作是終止調用 alarm函數的進程。

參數:

  • seconds:延遲秒數

返回值:

  • 若以前沒有設置過定時器,或設置的定時器已超時,返回0;否則返回定時器剩餘的秒數,並重新設定定時器。
#include <signal.h>
int raise(int signum)

功能:

  • 給調用進程本身發送一個信號

參數:

  • signum:信號的編號

返回值:

  • 成功返回0
  • 失敗返回-1
#include <unistd.h>
int pause(void)

功能:

  • 將調用進程掛起直至捕捉到信號爲止。這個函數通常用於判斷信號是否已到。

返回值:

  • 直到捕獲到信號, pause函數才返回-1,且errno被設置成EINTR。
#include <stdlib.h>
void abort(void)

功能:

  • 向進程發送一個 SIGABRT信號,默認情況下進程會退出。

注意:

  • 即使 SIGABRT信號被加入阻塞集,一旦進程調用了 abort函數,進程也還是會被終止,且在終止前會刷新緩衝區,關文件描述符。
#include <signal.h>
typedef void(*sighandler_t)(int)
sighandler_t signal(int signum, sighjandler_t handler);

功能:

  • 註冊信號處理函數(除了 SIGKILL信號、 SIGSTOP信號),即確定收到信號後處理函數的入口地址

參數:

  • sIgnum:信號編號
  • handler:
    • 忽略該信號:SIG_IGN
    • 執行系統默認動作:SIG_DFL
    • 自定義信號處理函數:處理函數名

返回值:

  • 成功:返回函數地址,該地址爲此信號上一次註冊的信號處理函數的地址。
  • 失敗:返回SIGERR
#include <signal.h>
int sigemptyset(sigset_t *set)

功能:

  • 初始化由set指向的信號集,清除其中所有的信號即初始化—個空信號集

參數:

  • set:信號集標識的地址,以後操作此信號集,對se迸行操作就可以了。

返回值:

  • 成功返回0
  • 失敗返回-1
#include <signal.h>
int sigfillset(sigest_t *set)

功能:

  • 初始化信號集合set將信號集合設置爲所有信號的集合。

參數:

  • set:信號集標識的地址,以後操作此信號集,對set進行操作就可以了。

返回值:

  • 成功返回0
  • 失敗返回-1
#include <signal.h>
int sigismember(sigest_t *set, int signum)

功能:

  • 查詢 signum標識的信號是否在信號集合set之中參數

參數:

  • set:信號集標識符號的地址
  • signum:信號的編號

返回值:

  • 在信號集中返回1
  • 不在信號集中返回0
  • 錯誤,返回-1
#include <signal.h>
int sigaddset(sigest_t *set, int signum)

功能:

  • 將信號signum加入到信號集合set之中。

參數:

  • set:信號集標識的地址
  • signum:信號的編號

返回值:

  • 成功返回0
  • 失敗返回-1
#include <signal.h>
int sigdelset(sigest_t *set, int signum)

功能:

  • 將 signum所標識的信號從信號集合set中刪除。

參數:

  • set:信號集標識的地址
  • signum:信號的編號

返回值:

  • 成功返回0
  • 失敗返回-1
#include <signal.h>
int sigprocmask(int how, const sigest_t *set, sigset_t *oldset)

功能:

  • 檢査或修改信號阻塞集,根據how指定的方法對進程的阻塞集合進行修改,新的信號阻塞集由se指定,而原先的信號阻塞集合由 oldset保存。

參數:

  • how:信號阻塞集合的修改方法
    • SIG_BLOCK:向信號阻塞集合中添加set信號集
    • SIG_UNBLOCK:從信號阻塞集合中刪除set集合
    • SIG_SETMASK:將信號阻塞集合設爲set集合
  • set:要操作的信號集地址
  • oldest:保存原先信號集地址

返回值:

  • 成功返回0
  • 失敗返回-1
#include <signal.h>
int sigqueue(pid_t pid, int sig, const union sigval value)

功能:

  • 給指定進程發送信號

參數:

  • pid:信號

  • sig:信號的編號

  • value:通過信號傳遞的參數

    • union sigval{
      	int sival_int;
      	void *sival_ptr;
      }
      

返回值:

  • 成功返回0
  • 失敗返回-1
#include <signal.h>
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)

功能:

  • 檢査或修改指定信號的設置或同時執行這兩種操作。
  • 如果act指針非空,則要改變指定信號的設置;如果 oldact指針非空,則系統將此前指定信號的設置存入 oldact。

參數:

  • sIgnum:信號編號
  • act:新的信號設置指針
  • oldact:舊的信號設置指針

返回值:

  • 成功返回0
  • 失敗返回-1
void (*sa_sigaction)(int signum, siginfo_t *info, void *context)

參數:

  • sIgnum:信號的編號
  • info:記錄信號發送進程信息的結構體
  • context:可以賦給指向 ucontext_t類型的一個對象的指針,以引用在傳遞信號時被中斷的接收進程或線程的上下文
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章