시그널 트랩이란 무엇입니까?

시그널 트랩이란 무엇입니까?

신호는 프로세스 간의 통신 방법이지만 신호 트랩이 무엇인지 몇 가지 질문이 있습니다. 트랩은 운영 체제의 신호와 어떤 관련이 있습니까?

답변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을 포착하는 경우가 많습니다.

관련 정보