![시그널 트랩이란 무엇입니까?](https://linux55.com/image/85620/%EC%8B%9C%EA%B7%B8%EB%84%90%20%ED%8A%B8%EB%9E%A9%EC%9D%B4%EB%9E%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
신호는 프로세스 간의 통신 방법이지만 신호 트랩이 무엇인지 몇 가지 질문이 있습니다. 트랩은 운영 체제의 신호와 어떤 관련이 있습니까?
답변1
때로는 천 단어의 가치가 있는 예제가 있습니다. 이 C++ 코드는 매우 간단한 신호 처리기를 노출합니다.
void gracefullShutdown(int sigNum) {
// cleanup or do wathever you need to do in case of received signal(s)
// Terminate this executable
exit(sigNum);
}
int main(int argc, char* argv[]) {
signal(SIGINT , gracefullShutdown);
signal(SIGTERM , gracefullShutdown);
std::cout << "starting..." << std::endl;
while(1);
exit(EXIT_SUCCESS);
}
프로그램이 실행되는 동안 Ctrl+C를 누르면 Linux 커널은 프로그램에 SIGINT 신호를 보내고 일반적으로 종료되지만 이 경우 종료하기 전에 특정 작업을 수행할 수 있습니다.
답변2
"신호 잡기"(또는신호 처리기 설치)은 신호가 수신될 때 어떤 작업을 수행하는 것입니다. 설명하기 위한 작은 쉘 스크립트는 다음과 같습니다.
#!/bin/sh
bye() {
echo bye
exit 1
}
trap bye SIGUSR1
echo hello
for Y in $(jot 80)
do
printf '.'
sleep 1
done
echo not reached
구현하다:
$ shtrap & { sleep 3 && kill -s SIGUSR1 $!; }
[2] 22471
hello
...[1] User defined signal 1 sleep 1
bye
스크립트를 백그라운드 프로세스로 시작하고 3초 동안 기다린 다음 kill
. 스크립트는 신호를 포착하고 해당 bye
기능을 호출합니다.
운영 체제는 각 신호의 기본 동작을 정의합니다. 이를 캡처하면 프로그램이 기본값을 변경할 수 있습니다. 데몬은 프로그램이 실행되는 동안 구성 파일을 강제로 다시 읽도록 하기 위해 이러한 방식으로 SIGHUP을 포착하는 경우가 많습니다.