Bash 5에서 다음을 수행하고 싶은 상황에 직면했습니다.
trap 'echo trapped!' USR1
while true; do kill -SIGUSR1 $$; sleep 1; done &
하지만 신호가 전송될 때마다 트랩 코드를 계속하려면 키보드에서 Enter 키를 눌러야 합니다.
실제로 저는 키보드 조작 없이 트랩이 실행되기를 원합니다.
편집하다:
마지막으로 나는 다음과 같이 작동하게 만들었습니다.
trap 'echo trapped!' USR1
while true; do kill -USR1 $$; kill -INT $$; sleep 1; done &
하지만 저는 이 솔루션이 해결책이 아니라 해결책이라고 생각합니다.
답변1
누군가 비슷한 문제를 겪고 있는 것 같습니다.여기.
간단히 말해서, 하위 프로세스에 내장된 트랩(이 경우 "에코 트랩!")에서 명령을 실행할 수 있는 경우입니다. 명령을 파일(예 a.sh
: )에 넣을 수 있습니다.
trap 'echo trapped!' USR1
while true; do kill -USR1 $$; sleep 1; done
파일을 백그라운드 프로세스로 실행합니다. bash a.sh &
하위 프로세스에서 이 작업을 수행할 수 없으면 대화형 셸이 사용자가 명령을 입력할 때까지 기다리는 동안 차단 읽기를 수행하고 대부분의 작업을 처리하지 못하기 때문에 좋은 해결책이 없습니다. 상황이 발생하면 신호를 보냅니다(알다시피 SIGINT를 처리합니다). 위의 솔루션은 트랩이 비대화형 셸에 있기 때문에 작동합니다(따라서 신호를 수신할 때 읽기 차단 중이 아닙니다).