여러 개의 로그 파일이 있고 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
이 예에서와 같이 하위 프로세스에 도달합니다.