시그널 - 해당되는 글 8건

sigprocmask() 블록
.                                            
.    <-- 중간에 SIGINT시그널이 들어왔다.
.
.
sigprocmask()해제
pause();
블럭을 해제하면
시그널이 들어오면 포즈 이후에  시그널이 중간에 들어온게 있으니까.
포즈에서 프로그램이 중단되지 않고 바로 밑에 프로그램이 실행된다고 생각하지만
실제로는
블록된공간에서 시그널이 들어오면 시그널 바로 처리하고 PAUSE가 실행된다.
그리고 그다음 시그널을 오기를 기다리고 있다가 시그널이 들어오면 실행이된다.

      c 언어  |  2007. 9. 17. 11:22




#include <stdio.h>
#include <unistd.h>
#define MAX 100

main()
{
    char buffer[MAX];
    int n;

    alarm(10);   /* 10초 후에 SIGALRM 시그널을 자신에게 보냄 */
    n=read(0, buffer, MAX);
    /* SIGALRM 시그널을 받기 전에 실행하면 SIGALRM 시그널 요청은 취소 */
    alarm(0);
    write(1, buffer, n);
    exit(0);
}

      c 언어  |  2007. 9. 17. 11:12





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

void signalHandler(int signo);

main()
{
    struct sigaction act;

    /* 시그널이 오면 signalHandler를 실행하도록 설정 */
    act.sa_handler = signalHandler;
    /* 모든 시그널은 시그널을 처리하는 동안 블록되도록 설정 */
    sigfillset(&act.sa_mask);
    act.sa_flags = 0;
    /* SIGINT에 대해 act 행동을 하도록 설정 */
    sigaction(SIGINT, &act, NULL);
    printf("call sigaction\n");
    while(1)
       sleep(5);
}

void signalHandler(int signo)
{
    printf("start handler\n");
    sleep(10);
    printf("end handler\n");
}

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



sokoban's Blog is powered by Daum & Tattertools