當前位置:編程學習大全網 - 編程軟體 - linux系統中SIGUSR1信號是如何產生的。

linux系統中SIGUSR1信號是如何產生的。

首先,Linux中的信號可以通過kill -l命令獲取,如下圖所示:

如上圖所示,編號為1 ~ 31的信號為傳統UNIX支持的信號,是不可靠信號(非實時的),編號為32 ~ 63的信號是後來擴充的,稱做可靠信號(實時信號)。不可靠信號和可靠信號的區別在於前者不支持排隊,可能會造成信號丟失,而後者不會。

其次,SIGUSR1 ,這是留給用戶使用的信號。壹般在編程中使用。舉例說明:sigqueue向本進程發送數據的信號,C語言代碼如下 :

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <signal.h>

#include <unistd.h>

void myhandler(int signo,siginfo_t *si,void *ucontext);

int main(){

union sigval val;//定義壹個攜帶數據的***用體

struct sigaction oldact,act;

act.sa_sigaction=myhandler;

act.sa_flags=SA_SIGINFO;//表示使用sa_sigaction指示的函數,處理完恢復默認,不阻塞處理過程中到達下在被處理的信號

//註冊信號處理函數

sigaction(SIGUSR1,&act,&oldact);

char data[100];

int num=0;

while(num<10){

sleep(2);

printf("等待SIGUSR1信號的到來\n");?

sprintf(data,"%d",num++);

val.sival_ptr=data;

sigqueue(getpid(),SIGUSR1,val);//向本進程發送壹個信號

}

}

void myhandler(int signo,siginfo_t *si,void *ucontext){

printf("已經收到SIGUSR1信號\n");

printf("%s\n",(char*)(si->si_ptr));

}

  • 上一篇:microsoft visual c++是什麽
  • 下一篇:09年長城風駿芯片鑰匙怎麽匹配
  • copyright 2024編程學習大全網