일시 중지 터미널 스크립트를 사용하고 SIGSTOP
있으며 일시 중지 중임을 나타내는 메시지를 인쇄하고 싶습니다.
- 트랩을 할 수 없어서 before를 보내고 잡아보려고
SIGSTOP
했는데 트랩에 넣은 명령은 결국 스크립트가 재개된 후에 실행됩니다.SIGUSR1
SIGSTOP
- 와 사이에 넣으면
sleep
트랩 명령이 실행되지만 스크립트는 수신되기 전에 잠시 동안 실행됩니다.SIGUSR1
SIGSTOP
SIGSTOP
외부에서 스크립트에 "일시 중지 중입니다"라고 에코하도록 지시할 수 있는 방법이 있나요?곧멈추다?
편집 : 나는 bash를 사용하고 있습니다. 내 테스트 스크립트는 다음과 같습니다.
trap "echo Paused" SIGUSR1
trap "echo Restarted" SIGCONT
while : ; do
echo `date`
sleep 1
done
나는 그것을 "./blah.sh"라고 부릅니다.
내 제어 스크립트는 다음과 같습니다
script_id=`pidof -x blah.sh`
kill -SIGUSR1 $script_id
sleep 0.5
kill -SIGSTOP $script_id
sleep 2
script_id=`pidof -x blah.sh`
kill -SIGCONT $script_id
답변1
.see SIGTSTP
대신 사용해야 합니다 .SIGSTOP
여기:
이
SIGSTOP
신호는 프로세스를 중지합니다.무시할 수도, 무시할 수도 없습니다. 또는 차단되었습니다.이
SIGTSTP
신호는 대화형 정지 신호입니다.SIGSTOP
이것 과는 달라 신호를 처리하고 무시할 수 있습니다.
예는 다음과 같습니다.
paused() {
echo PAUSED
kill -SIGSTOP $$ # This signal cannot be handled. Here the script is actually paused.
echo CONTINUED
}
trap 'paused' SIGTSTP
예:
$ ./test_pause.sh & disown
[1] 18852
$ kill -TSTP 18852
PAUSED
$ kill -CONT 18852
CONTINUED