2017-04-14 13 views
0

こんにちは、私はこのコードをやったことがありますが、私は次のように追加する必要があります。シグナルハンドラの名前のインストール方法sig_handler

  1. がデフォルトに1つの
  2. キャッチ信号SIGINTをSIGINTためのシグナルハンドラを復元し、これまでのところ、これがコーディングiは信号

の数値を出力信号SIGINTを無視します持っている

 void sig_handler(int signo) 
    { 
    // body of signal handler 
    } 

    int main() 
{ 
    struct sigaction act; 
    act.sa_flags = 0; 
    act.sa_handler = sig_handler; 
    sigfillset(& (act.sa_mask)); 

if (sigaction(sig, &act, NULL) != 0) 
    { 
     perror("sigaction"); exit(1); 
    } 
} 
+0

そして、質問は? – alk

+0

SIGINTをキャッチして数値を出力するコードを記述しますか?これ以上何もしたくないですか? コードを記述するヒントについては、[this](http://stackoverflow.com/questions/4217037/catch-ctrl-c-in-c)を参照してください。 – Gaurav

答えて

0

このような何かが始まります。

#include <stdio.h> 
#include <signal.h> 

void handle_signal(int signum) 
{ 
    printf("\nRecived signal: %d\n", signum); 
    switch(signum) 
    { 
     case SIGINT: 
      printf("I won't respond to ctrl-c!\n"); 

      //restore to default 
      signal(SIGINT, SIG_DFL); 
      break; 
     case SIGWINCH: 
      //windows size change 
      break; 
     case SIGCONT: 
      //continue process 'fg' in terminal 
      break; 
     case SIGTSTP: 
      //ctrl-z 
      break; 
     default: 
      //others 
      break; 
    } 
} 

void  listen_to_signals(void) 
{ 
    int  i; 

    i = 0; 
    while (i < 32) 
    { 
     if (i != SIGKILL && i != SIGSTOP && i != SIGCHLD && i != SIGCONT && 
      i != SIGURG && i != SIGIO) 
      signal(i, &handle_signal); 
     i++; 
    } 
} 

int  main() 
{ 
    listen_to_signals(); 
    while(1) 
    {} 
} 

私ができるすべての信号を聞いています:私が聞くことができないシグナルがいくつかあります。

注:「殺す-9 pidof your_program」をそれ

停止するために使用します。注:私はそのデフォルトの動作に復元していますので、初めてSIGINTは無視されますが、二回目は、それが(しません)

関連する問題