2017-04-14 5 views
0

안녕하세요,이 코드를 완료했습니다.하지만 추가 할 필요가있는 somethings가 있습니다. 신호 처리기 이름을 설치하는 방법 sig_handler

지금까지이 부호화 내가되는 신호의 수치로부터 기본 한

  • 캐치 신호 SIGINT 및 지문 SIGINT위한 신호 처리기를 복원 신호 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) 
        {} 
    } 
    

    참고 : 나는 내가들을 수있는 모든 신호를 듣고있다. 내가들을 수없는 신호가있다.

    참고 : SIGINT이 무시됩니다 처음,하지만 두 번째 시간, 그것은 (나는 그것의 기본 동작에 복원있어하지 않기 때문에 : 사용 '살인 -9 pidof your_program은'이

    참고 중지)