프로세스를 백그라운드에서 기다리게 하고 KILL 이외의 신호에 의해 종료되는 방법

프로세스를 백그라운드에서 기다리게 하고 KILL 이외의 신호에 의해 종료되는 방법

나는 백그라운드에서 실행되고 매시간 몇 가지 작업을 수행하는 스크립트를 원합니다. 신호가 수신되면 종료되어야 합니다. 마지막으로 종료하기 전에 몇 가지 정리 작업을 수행해야 합니다.

이 개념을 바탕으로 다음과 같이 썼습니다.

trap 'clean_up; exit' SIGTERM
while true
do
    someActions
    sleep 1h
done

스크립트를 실행합니다.

./script &

나는 스크립트를 죽인다.

kill -SIGTERM <pid>

스크립트가 예상대로 작동하지 않은 것으로 나타났습니다. 그 이유는 신호를 통해서만 잠자는 프로세스를 죽일 수 있기 때문이라고 생각합니다 SIGKILL. 하지만 반면에 SIGKILL나가기 전에 청소를 하라는 신호를 잡을 수는 없습니다.

그러면 프로세스가 백그라운드에서 대기하고 다른 신호를 수신할 때 종료되도록 만드는 방법은 무엇입니까 SIGKILL?

답변1

"예상대로 작동하지 않는다"는 것은 SIGTERM 핸들러를 작성했지만 SIGTERM에 대해 실행되지 않았다는 의미입니다.코드에 실수가 있습니다.

다음은 실제 예입니다.

#!/bin/bash

cleanup () {
        echo "goodbye!"
        exit 0
}

trap 'cleanup' SIGTERM

while sleep 1; do
        echo $BASHPID
done

반응은 예상대로였습니다 kill -SIGTERM. 이미 알고 있는 SIGKILL 및 SIGSTOP을 제외하고 원하는 모든 신호를 사용할 수 있습니다.

관련 정보