인터럽트 신호를 하위 프로세스로만 제한하는 방법은 무엇입니까?

인터럽트 신호를 하위 프로세스로만 제한하는 방법은 무엇입니까?

여러 개의 로그 파일이 있고 tail -f루프에서 해당 파일에 대한 작업을 수행하여 Ctrl-C를 누르면 현재 파일이 tail -f종료되고 다음 로그 파일로 이동하려고 합니다.

for log in *.log; do
    printf '%s\n' "Tailing log '$log'; press Ctrl-C to skip to the next"
    tail -f "$log"
done

문제는 Ctrl-C를 누르면 루프 자체가 종료된다는 것입니다. tail이 경우 인터럽트 신호를 하위 프로세스로만 제한하려면 어떻게 해야 합니까?

답변1

놓다

trap ":" SIGINT

루핑하기 전에. 이로 인해 쉘이 신호를 무시하게 됩니다. 그러나 신호 처리기의 의미에서 "무시"하는 것이 아니라 더미 명령을 실행한다는 의미에서만 가능합니다.

셸 프로세스는 커널의 관점에서 신호를 차단하지 않기 때문에 tail이 예에서와 같이 하위 프로세스에 도달합니다.

관련 정보