signal 함수와 인터럽트에 대해 알아보자:)
dqQQQ
·2023. 11. 26. 19:30
개요
쉘에서 어떤 프로그램을 실행중 일 때 ctrl-C를 이용하여 프로그램을 종료한다.
그 원리와 방법에 대해 알아보겠다.
signal
함수 원형
: void (signal(int sig, void (func)(int)))(int);함수 라이브러리
: #include <signal.h>int sig
: signal flagvoid (*func)(int))
: signal 감지시 실행할 함수
signal 종류
signal 설명
SYSIFCOPT(*ASYNCSIGNAL)옵션으로 컴파일하면 비동기 신호를 사용하며 기본적으로 signal 함수는 동기 신호를 감지한다.
신호가 감지되면 두번째 파라메터인 함수를 실행하고 그 함수의 인자로 첫번째 인자값을 넣어준다.
신호 무시
signal(SIGINT, SIG_IGN);
와 같은 형식으로 사용하면 SIGINT신호는 무시된다.
두번째 파라메터로 SIG_IGN을 넣어주면 해당 신호를 무시하라는 뜻이다.
ctrl-C
신호의 종류를 보다보면 두번째에 SIGINT가 있다. 이 신호의 설명에는 interrupt program이라고 적혀있는데, 키보드의 의한 인터럽트 신호를 감지하는 것이다.
키보드의 의한 인터럽트 신호는 ctrl-C이다.
활용한 예시
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
void sigHandler(int sig){
exit(0);
}
int main(){
signal(SIGINT, sigHandler);
while(1);
}
ctrl-C, ctrl-D and ctrl-\
ctrl-C는 위에서 말한 것처럼 현재의 프로세스에 SIGINT 신호를 보내는 것을 의미하고,
ctrl-D는 표준 입력에 EOF를 의미한다. 그러므로 입력창에 입력을 하면 터미널이 종료가 된다.
ctrl-\는 현재의 프로세스에 SIGQUIT 신호를 보낸다. 그러면 프로그램이 종료된다.
'42Seoul' 카테고리의 다른 글
readline 라이브러리에 대해 알아보자:) (0) | 2023.11.26 |
---|---|
환경변수에 대해서 알아보자:) (0) | 2023.11.26 |
정렬된 스택을 만들기 위한 명령어들을 만들어보자:) (0) | 2023.11.26 |
터미널에서 미니 게임을 구현해보자:) (0) | 2023.11.26 |
터미널에서 미니 대화창을 구현해보자:) (0) | 2023.11.26 |