信號及代碼示例

1.    信號的概念
    每個信號都有一個以SIG開頭的名字。
    在頭文件<signal.h>中,這些信號都被定義爲正整數。不存在編號爲0的信號。
    在信號發生的時候,可以進行一下處理:
    1)忽略此信號,有兩種信號不能被忽略(SIGKILL,SIGSTOP)。
    2)捕捉信號,通知內核在某種信號發生時調用一個用戶函數。
    3)執行系統默認動作(大多數信號的系統默認動作是終止進程)。
    常用的信號:
    SIGABRT    異常終止
    SIGALRM   超時
    SIGFPE        算數異常
    SIGINT        終端中斷符
     SIGKILL    寫至無讀進程的管道
    SIGSEGV    無效內存引用
    SIGUSR1    用戶定義
    SIGUSR2    用戶定義
2.    signal函數
    #include <signal.h>
    void (*signal (int signo, void (*func)(int)))(int);
    signo:     信號名
    func:       當接到此信號後要調用的函數的地址,捕捉該信號。
                    如果只能固定SIG_IGN則標識忽略此信號。
                    SIG_DEF則表示接到此信號後的動作時系統默認動作。
    簡化此函數原型:
    typedef void Sigfunc(int);
    Sigfunc *signal(int , Sigfunc *);
3.    簡單示例
#include <iostream>
#include <signal.h>

using namespace std;

static void signalFunc(int args)
{
cout << "SIGINT is got" << endl;
exit(1);
}

int main()
{
if (signal(SIGINT, signalFunc) == SIG_ERR) {
cout << "get SIGINT error" << endl;
}
getchar();
return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章