發送信號

發送信號
  –使用kill命令
•在命令行使用kill命令,向指定進程發送信號。
  –使用kill函數

#include <signal.h>編程

#include <sys/types.h>函數

int kill(pid_t pid, int sig);spa

•參數pid指定一個要殺死的進程,而sig是要發送的信號。
 
 
 
 
kill函數例子
int main(int arg, char *args[])
{
    if (arg > 1)
    {
        int pid = atoi(args[1]);
        kill(pid, SIGKILL);
    }
    else
    {
        printf("pid = %u\n",getpid());
        sleep(60);
    }
    return 0;
}

 

 

發送信號
  –使用raise函數

#include <signal.h>命令行

int raise(int signo);翻譯

kill函數將信號發送給進程,raise函數容許進程向自身發送信號;
raise(signo)等價於kill(getpid(), signo)。
 
 
 
alarm函數設置了一個定時器,當定時器到了就發送SIGALRM信號。

#include <unistd.h>code

nsigned int alarm(unsigned int seconds);blog

seconds是計時器時間到後時鐘的秒數。
若是沒有設置其餘超時,函數返回0,不然返回值爲前面安排超時中保留的秒數
一個進程只能設置一次超時
把seconds設置爲0能夠取消前面的超時設置。
 
 
 
alarm函數例子
void catch_Signal(int Sign)
{
    switch(Sign)
    {
    case SIGALRM:
        printf("SIGALRM Signal\n");
    }
}
int main(int arg, char *args[])
{
    signal(SIGALRM, catch_Signal);
    alarm(1);
    pause();
    return 0;
}

 

 

abort函數。

void abort(void);進程

該函數發送SIGABRT信號給調用進程,進程不該該忽略這個信號。
即便進程捕捉到SIGABRT這個信號,進程仍是會異常退出。
讓進程捕捉SIGABRT的意圖是,在進程終止前由其執行所需的清理操做。
 
 
 
sleep函數。

nsigned int sleep(unsigned int seconds);ip

參數seconds指定了睡眠時間。
超過seconds指定時間,函數返回。
調用進程捕捉到一個信號並從信號處理程序返回。
 
 
 
做業控制信號。
  –SIGCHLD-子進程已中止或終止;
  –SIGCONT-若是進程已經中止,使其繼續運行;
  –SIGSTOP-中止信號,不能被捕捉或者忽略;
  –SIGTTIN-後臺進程組成員讀控制終端;
  –SIGTTOU-後臺進程組成員寫到控制終端。
除SIGCHLD之外,大多數程序並不處理這些信號。
Shell程序通常須要處理些信號。
信號用於大多數複雜的應用程序中。
理解信號處理對於Linux編程很是重要。
 
 
 
相關文章
相關標籤/搜索