<개인공부>/[Linux\Unix]

[UNIX] 시그널(Signal) 기본설명 및 함수

BlockDMask 2017. 7. 7. 07:00
반응형

Unix에서 사용하는 Signal에 대해 알아보겠습니다. 

(Linux도 동일하려나.. 어짜피 조상은 같고 커널에서 제공하는 시스템 콜이니까..)

1. 시그널(Signal) 이란?

: Signal이란 Software interrupt로, process에 무엇인가 발생했음을 알리는 간단한 메시지를 비동기적으로 보내는 것이다.

: Signal을 받은 프로세스는 Signal에 따른 미리 지정된 기본 동작(default action)을 수행할 수도 있고, 사용자가 미리 정의해 놓은 함수에 의해서 무시하거나, 특별한 처리를 할 수 있다.

: 예를 들어 프로세스가 진행중에 Ctrl + c 를 누른다거나, 프로세스에 kill 명령이 내려지는것이 발생했을 때 Signal이 발생한다.


2. 시그널(Signal)의 종류

: 시그널은 <signal.h> 헤더 파일에 정의되어있고, 시그널에 따른 기본 처리는 프로세스를 종료하거나, 코어 덤프를 생성한다.

(코어 덤프는 특정 시점에 코어 파일을 만들고 종료한다. 코어 파일이란 비정상적으로 프로세스가 종료되는 경우, 프로세스의 영역을 코어 파일이라는 이름으로 프로그램을 실행 위치에 저장하는 파일을 말한다.)


3. 시그널(Signal) 함수의 종류.

**(2)는 시스템 콜(system call)을 뜻합니다. 

**(3)는 라이브러리 함수(library function)을 뜻합니다

.

i) kill 함수. (2)

 - 헤더 파일 <sys/types.h>, <signal.h>

 - 함수 원형 : int kill(pid_t pid, int sig)

 - 첫번째 파라미터 pid : 시그널을 받을 프로세스의 id.

 - 두번째 파리미터 sig : pid로 지정된 프로세스에 보내려는 시그널.

 - pid > 0 인 경우에는 pid로 지정한 프로세스에게 시그널을 보낸다.


ii) raise 함수. (2)

 - 헤더 파일 <signal.h>

 - 함수 원형 : int raise(int sig)

 - 파라미터 sig : 보내려는 시그널

 - raise는 이 함수를 호출한 프로세스에게 인자로 지정한 시그널(sig)를 보낸다.

 - signal handler가 호출되면 signal handler의 수행이 끝날 때 까지 raise 함수는 리턴하지 않는다.


iii) abort 함수 (2)

 - 헤더 파일 <sidlib.h>

 - 함수 원형 : void abort(void)

 - 이 함수를 호출한 프로세스에 SIGABRT 시그널을 보낸다.

 - SIGABRT 시그널은 프로세스를 비정상적으로 종료시키고 코어 덤프 파일 생성.


iv) sigsend 함수 (2)

 - 헤더 파일 <signal.h>

 - 함수 원형 : int sigsend(idtype_t idtype, id_t id, int sig)

 - sig로 지정한 시그널을 id로 지정한 프로세스나 프로세스 그룹에 보낸다.


4. 시그널(Signal) 정리.

- 이미 signal.h에 정의 되어있다. 

- 모든 시그널 종류를 정리한것이 아닙니다. (제가 생각하기에 자주 쓰이느것..... 주관적)
- 아래 있는 시그널 종류 : SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGTRAP, SIGABRT, SIGKILL, SIGBUS, SIGSEGV, SIGSYS, SIGPIPE, SIGALRM, SIGUSR1, SIGUSR2, SIGCHLD, SIGSTOP, SIGSTP, SIGCONT, SIGTALRM.

(표로 정리하고 싶었는데, 이미 엑셀에 내가 정리 해놔서 캡쳐.)


반응형