본문으로 바로가기
homeimage

시그널

해당되는 글 16
  • thumbnail
    컴퓨터/프로그래밍

    C언어 마이크로 초 동안 대기 함수 usleep()

    C usleep() 마이크로 초 동안 대기 함수 지정한 마이크로 초 동안 대기 상태가 됩니다. 헤더: unistd.h 형태: void sleep( unsigned long useconds) 인수: unsigned long useconds 대기 마이크로 초 반환: - C언어 usleep() 함수 예제 #include #include int main( void) { while( 1){ printf( "1초 마다 문자열 출력\n"); usleep( 1000 * 1000 ); } } C언어 usleep() 예제 실행 결과 ]$ ./a.out 1초 마다 문자열 출력 1초 마다 문자열 출력 1초 마다 문자열 출력 1초 마다 문자열 출력 1초 마다 문자열 출력 1초 마다 문자열 출력 1초 마다 문자열 출력 1초 마다..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시그널 블록 설정 및 대기 함수 sigsuspend()

    C함수 시그널 블록 설정 및 대기 sigsuspend() sigsuspend() 함수는 시그널 블록을 설정함과 동시에 시그널이 도착할 때까지 중단합니다. 즉, 아래와 같은 처리가 됩니다. sigprocmask( SIG_SETMASK, &sert, NULL); pause(); 그러나 sigprocmask() 호출과 pause() 호출 사이에도 시그널이 발생할 수 있는데, 이때 발생한 시그널은 잃어버릴 수 있다고 합니다. 예를 들어서 어떨 때는 Ctrl-C 한 번만 누르면 프로그램이 종료되는데, 어떨 때는 2번 눌러야 종료되는 현상 같은 것이죠. 그러므로 블록 설정과 동시에 시그널 도착을 바로 확인해야 시그널을 잃어버리는 일이 없을 것입니다. 이렇게 블록 설정과 함께 시그널을 대기하는 함수가 sigsuspe..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 블록된 시그널 확인 함수 sigpending()

    C함수 블록된 시그널 확인 sigpending() sigpending() 함수를 사용하면 시그널을 블록된 상태에서 어떤 시그널이 발생해서 블록되었는지를 알 수 있습니다. 즉, 발생했지만 블록되어 대기 중인 시그널이 무엇인지를 확인합니다. 헤더: signal.h 형태: int sigpending(sigset_t *set) 인수: sigset_t *set 블록화된 시그널 집합을 담을 변수 반환: 0 == 성공, -1 == 실패 C언어 sigpending() 함수 예제 #include #include #include int main( void) { sigset_t sigset; sigset_t pendingset; int ndx = 0; // 모든 시그널을 블록화 sigfillset( &sigset); sig..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시그널 대기 상태로 설정 함수 sigpromask()

    C함수 시그널 대기 상태로 설정 sigpromask() 다른 일에 방해받지 말고 매우 중요한 일을 반드시 처리해야 할 경우가 있습니다. 매우 중요한 일이라 시그널이 발생하더라도 일을 먼저 처리하고 나중에 발생한 시그널을 처리하고 싶습니다. 이렇게 시그널이 발생하더라도 대기상태로 만들어 주는 함수가 sigprocmask()입니다. 헤더: signal.h 형태: int sigprocmask(int how, const sigset_t *set, sigset_t *oldset) 인수: int how 시그널 집한을 어떻게 처리할지 방법을 지정 sigset_t *set 이번에 설정할 시그널 집합 sigset_t *oldset 이전에 블록된 시그널 집합 반환: 0 == 성공, -1 == 실패 시그널 집합에 대해 ho..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 지정 시간에 SIGALRM 전송 함수 alarm()

    C함수 지정 시간에 SIGALRM 전송 alarm() 지정한 시간이 되면 자기 자신에게 SIGALRM이 전송합니다. 프로세스는 SIGALRM을 받으면 종료되므로 유의해야 합니다. 알람처럼 주기적으로 호출 받으려면 사용자 시그널 핸들을 사용하면 됩니다. 헤더: unistd.h 형태: unsigned int alarm(unsigned int seconds) 인수: unsigned int seconds seconds 초 후에 시그널 전송 반환: unsigned int 0 == 이전에 설정한 알람 없음 0 < 이전에 alarm() 호출로 시그널이 발생하기 까지 남은 시간 C언어 alarm() 함수 예제 1 3초 후에 SIGALARM 호출합니다. #include #include int main( void) { i..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 프로세스 자신에게 시그널 전송 함수 raise()

    C raise 함수 프로세스 자신에게 시그널 전송 raise()는 프로세스 자신에게 시그널을 보낼 때 사용합니다. kill() 함수를 구현한다면 아래와 같습니다. 헤더: signal.h 형태: int raise(int sig) 인수: int sig 전송하려는 시그널 번호 반환: == 0 성공 != 0 실패 C언어 raise() 함수 예제 #include #include #include int main( void) { int count = 0; while( 1 ){ printf( "count %d\n", count++); if ( 3 == count){ raise( SIGKILL); } sleep( 1); } } C언어 raise() 예제 실행 결과 ]$ ./a.out 카운트 다운 3 count 0 cou..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시그널을 수신할 때까지 대기 함수 pause()

    C함수 시그널을 수신할 때까지 대기 pause() pause() 함수를 호출하면 시그널을 수신할 때까지 대기 상태로 빠집니다. 어떤 시그널이 발생하기 전까지 대기상태를 유지할 때 유용합니다. 헤더: unistd.h 형태: int pause(void) 인수: - 반환: 항상 -1을 반환하며 errno에는 ERESTARTNOHAND 로 설정됩니다. C언어 pause() 함수 예제 #include #include #include void sigint_handler( int signo) { printf( "Ctrl-C 키를 누르셨죠!!\n"); } int main( void) { printf( "시그널을 받을 때까지 잠수합니다.\n"); // CTRL-C로 바로 종료되는 것을 막기 위해 // SIGINT를 사용..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 kill 시그널 전송 함수 kill()

    C함수 kill 시그널 전송 kill() kill() 함수는 쉘에서 프로세스를 죽이는 kill 명령과는 달리 프로세스에 시그널을 전송합니다. 물론, 프로세스에 SIGKILL을 보내면 쉘 명령의 kill과 같은 역활을 합니다. 헤더: signal.h 형태: int kill(pid_t pid, int sig) 인수: pid_t pid int sig 시그널 번호 반환: int 0 == 성공 -1 == 실패 kill() 함수는 특정 프로세스 뿐만 아니라 같은 그룹 ID가 같은 모든 프로세스에게 동시에 시그널을 전송할 수 있으며, 권한 안에 있는 모든 프로세스에게도 시그널을 전송할 수 있습니다. int kill(pid_t pid, int sig); 첫 번째 인수는 pids는 KILL 대상 프로세스 ID, 두 번째..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시그널 처리 함수 sigaction()

    C함수 시그널 처리 sigaction() sigaction() 함수는 signal()보다 향상된 기능을 제공하는 시그널 처리를 결정하는 함수입니다. 헤더: signal.h 형태: int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact) 인수: int signum 시그널 번호 struct sigaction *act 설정할 행동. 즉, 새롭게 지정할 처리 행동 struct sigaction *oldact 이전 행동, 이 함수를 호출하기 전에 지정된 행동 정보가 입력됩니다. 반환: int 0 == 성공, -1 == 실패 signal()에서는 처리할 행동 정보로 시그널이 발생하면 호출이될 함수 포인터를 넘겨 주었습니다. 그러..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시그널 처리 방법을 설정 함수 signal()

    C함수 시그널 처리 방법을 설정 signal() 시그널 처리를 설정합니다. 헤더: signal.h 형태: void (*signal(int signum, void (*handler)(int)))(int) 인수: int signum 시그널 번호 void (*handler)(int)시그널을 처리할 핸들 반환: void *()(int) 이전에 설정된 시그널 핸들러 시그널 처리는 아래와 같이 설정할 수 있습니다. 즉, 어떤 시그널이 발생하면 기존 방법으로 처리할지 아니면 무시할지 프로그램에서 직접 처리할지를 설정할 수 있습니다. 설정하는 옵션은 3가지가 있습니다. 유형 의미 SIG_DFL 기존 방법을 따른다. SIG_IGN 시그널을 무시한다. 함수이름 시그널이 발생하면 지정된 함수를 호출한다. C언어 signal..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 지정한 시간만큼 대기 함수 sleep()

    C함수 지정한 시간만큼 대기 sleep() 지정한 시간 동안 대기 상태가 됩니다. 지정한 시간이 경과되었거나 시그널을 수신하면 대기에서 풀립니다. 인수로 받는 시간 값은 초 단위입니다. sleep() 함수 호출 후에 지정된 시간에 복귀되면 0을 반환합니다. 그러나 시그널 발생에 의해 복귀되었다면 남은 시간이 반환됩니다. 헤더: unistd.h 형태: unsigned int sleep( unsigned int seconds) 인수: unsigned int seconds 대기 시간 반환: unsigned int 남은 시간이 반환 C언어 sleep() 함수 예제 #include #include int main( void) { while( 1){ printf( "1초 마다 문자열 출력\n"); sleep( 1 ..
  • thumbnail
    컴퓨터/프로그래밍

    C언어 시그널 집합에 모든 시그널 정보 추가 함수 sigfillset()

    C함수 시그널 집합에 모든 시그널 정보 추가 sigfillset() sigemptyset() 함수는 시그널 집합 변수의 모든 내용을 삭제한다면, sigfillset() 함수는 시그널 집합 변수에 모든 시그널을 추가합니다. 헤더: signal.h 형태: int sigfillset(sigset_t *set) 인수: sigset_t *set 시그널 집합 변수 반환: 0 == 집합 변수에 모든 시그널 정보를 넣었음 -1 == 실패했음 리눅스에는 매우 다양한 시그널이 있습니다. 이 시그널을 하나씩 처리하거나 여러 개를 하나로 묶어서 한꺼번에 처리할 수 있습니다. 시그널 집합에 sigfillset(), sigemptyset(), sigaddset(), sigdelset()으로 시그널을 추가·삭제할 수 있으며 sig..
    최근글
    이모티콘창 닫기
    울음
    안녕
    감사해요
    당황
    피폐

    이모티콘을 클릭하면 댓글창에 입력됩니다.