시그널 - 해당되는 글 8건

struct sigaction {
   void (*sa_handler)(int);  /* 설정할 시그널 핸들러 */
   void (*sa_sigaction)(int, siginfo_t *, void *);  /*SA_SIGINFO옵션을 주면   void (*sa_handler)(int)대신 이함수가  실행된다.
                                                                                                                sa_handler 대신 사용될 시그널 핸들러 */
   sigset_t sa_mask;  /* 시그널을 처리하는 동안 블록시킬 시그널 집합 */
   int sa_flags;  /* 시그널 처리 관련 옵션들 */
   void (*sa_restorer)(void);  /* 사용되지 않음 */
};

>> sa_flags 멤버

SA_NOCLDSTOP
signum이 SIGCHLD일 경우, 자식 프로세스가 멈추었을 때 부모 프로세스로 SIGCHLD가 전달되지 않는다.
SA_ONESHOT 또는SA_RESETHAND
시그널을 받으면 설정된 행동을 취하고, 시스템 기본 설정인 SIG_DFL로 재설정 한다.예제 24_6처럼 이런 옵션으로 설정할수 있다.
SA_RESTART
시그널 처리에 의해 방해받은 시스템 호출은 시그널 처리가 끝나면 재시작 한다.
SA_NOMASK 또는SA_NODEFER
시그널을 처리하는 동안에 전달되는 시그널은 블록되지 않는다.
SA_SIGINFO
이 옵션을 설정하지 않으면 시그널 번호 만을 인수로 하는 sa_handler가 동작을 하는데 이 옵션을 설정하면 세 개를 인수로 하는 sa_sigaction이 동작한다. 세 개의 인수는 시그널 번호, 시그널이 만들어진 이유, 시그널을 받는 프로세스의 정보이다.
-----------------------------26-7---------------------------------------------------------------
#include <stdio.h>
#include <signal.h>
#include <unistd.h>

main()
{
    struct sigaction act;

    /* 시그널에 대해 어떤 동작을 할 건지를 설정하는 문장으로
      시그널을 무시하도록 하는 SIG_IGN을 설정 */
    act.sa_handler = SIG_IGN;
    /* act.sa_mask는 시그널을 처리하는 동안 블록시킬 시그널을 모아 놓은
      시그널 집합인데, 시그널 집합을 비웠으므로 모든 시그널은 블록되지 않음 */
    sigemptyset(&act.sa_mask);
    /* 옵션을 설정하지 않음 */
    act.sa_flags = 0;
    /* SIGINT에 대해 act 행동을 하도록 설정 */
    sigaction(SIGINT, &act, NULL);

    while(1) {
       printf("Hello World\n");
       sleep(1);
    }
}

      c 언어  |  2007. 9. 17. 10:38




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

void signalHandler(int signo);

main()
{
    /* SIGINT 시그널 받으면 signalHandler 실행하도록 설정 */
    signal(SIGINT, signalHandler);
    while(1) {
       printf("Hello World\n");
       sleep(1);
    }
}

void signalHandler(int signo)  
{
//SIGINT 시그널을 받으면 이함수가 소출되고 SIGINT의 넘버를 받은 signo를 출력하고
    printf("Hi! signal %d\n", signo);  /* signo는 시그널 번호를 출력을 해준다 */
    /* SIGINT 시그널 받으면 시스템에서 기본적으로 설정한 동작을 하도록 설정
        SIG_DFL이 실행 그다음 부터는 월래 대로 키를 입력하는대로 먹는다*/

    signal(SIGINT, SIG_DFL);
}


      c 언어  |  2007. 9. 17. 09:58





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

main()
{
    int count=0;

    /* SIGINT 시그널 받으면 무시하도록 설정 */
    signal(SIGINT, SIG_IGN);
    while (1) {
       printf("Hello World\n");
       sleep(1);
       if (++count == 5)   /* count가 5가 되면 */
          /* SIGINT 시그널 받으면 시스템에서 기본적으로 설정한 동작을 하도록 설정 */
          signal(SIGINT, SIG_DFL);
    }
}
5초가 지날때까지 콘트롤 제트가 먹지 않는다

      c 언어  |  2007. 9. 17. 09:51



sokoban's Blog is powered by Daum & Tattertools