IPC 기법처럼 활용할 수 있는 시그널과 소켓에 대해서 알아보자.
Signal
- 시그널은 이벤트이다.
- 특정 시그널은 커스텀이 가능하다
- 유닉스에서 30년 이상 사용된 전통적인 기법
- 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지 알림
- 프로세스 관련 코드에 관련 시그널 핸들러를 등록해서 해당 시그널 처리 실행
- 시그널 무시:
- 시그널 블록: 일정 시간 동안 동작하지 않도록
- 등록된 시그널 핸들러로 특정 동작 수행
- 등록된 시그널 핸들러가 없다면, 커널에서 기본 동작 수행
주요 시그널
- SIGKILL: 프로세스 죽이기(슈퍼 관리자가 사용하는 시그널)
- SIGALARM: 알람 발생
- SIGSTOP: 프로세스 중단(Ctrl + z)
- SIGCONT: 멈춰진 프로세스 실행
- SIGINT: 프로세스에 인터럽트를 보내서 프로세스를 죽이기(Ctrl + c)
- SIGSEGV: 프로세스가 다른 메모리 영억을 침범
kill -l
시그널 관련 코드 예
static void signal_handler(int signo) {
printf("Catch SIGINT!\n");
exit(EXIT_SUCCESS);
}
int main (void) {
if(signal(SIGINT, signal_handler) == SIG_ERR) {
printf("Can't catch SIGINT!\n");
exit(EXIT_FAILURE);
}
for(;;)
pause();
return 0;
}
int main(void) {
if(signal(SIGINT, SIG_IGN) == SIG_ERR){
printf("Can't catch SIGINT!\n");
exit (EXIT_FAILURE);
}
for(;;)
pause();
return 0;
}
시그널과 프로세스
- PCB에 해당 프로세스가 블록 또는 처리해야하는 시그널 관련 정보 관리
- sigpending: 시그널이 오면 PCB에 처리해야할 시그널이 있다는 알림
- pending: 시그널 대기 상태
- blocked: blocked 상태인 시그널 알림
- sig: 각각의 시그널에 대해 어떤 동작(action)을 수행해야할지 알림
Socket
- 소켓은 네트워크 통신을 위한 기술
- 기본적으로 클라언트와 서버 두 개의 다른 컴퓨터간의 네트워크 기반 통신을 위한 기술
- 네트워크 기기를 이용을 할 수 있는 시스템콜로 생각해도 무방하다.
소켓과 IPC
이미지출처
- 소켓을 하나의 컴퓨터 안에서, 두 개의 프로세스간에 통신 기법으로 사용 가능