do_some_simple_job
bash에는 10분마다 실행되는 다음과 같은 무한 루프가 있습니다 .
while true
do
do_some_simple_job
sleep 600
done
이 작업을 실행하는 동안 스크립트가 작업을 취소하지만 스크립트를 종료하지 않는 등 일부 키 입력을 허용하도록 하고 싶습니다. 이것이 가능합니까?
답변1
예, 가능합니다.
#!/bin/sh
sigint_handler () {
echo "Killing the job ($job_pid)"
kill $job_pid
}
while true; do
some_simple_job & job_pid=$!
trap 'sigint_handler' INT
echo "Job started ($job_pid)"
wait
trap - INT
echo "Job finished, waiting 10 minutes..."
sleep 600
done
이 스크립트(및 기타 호환 가능한 셸 에서도 sh
작동 )에는 무한 루프가 포함되어 있습니다. 백그라운드에서 작업을 시작한 후 설치됩니다.bash
ksh93
신호 처리기, 스크립트가 특정 신호를 포착할 때마다 실행되어야 하는 작은 루틴입니다. 캡처한 신호는 INT
(인터럽트) 신호 이며 Ctrl+ 를 눌러 보낼 수 있습니다 C.
스크립트는 작업이 완료될 때까지 기다린 다음 10분 동안 대기합니다(스크립트와 마찬가지로). 잠들기 전에 신호 처리기를 언로드하므로 Ctrl+interrupt 스크립트를 사용할 수 있습니다 C.
작업이 실행되는 동안 신호가 수신 되면 INT
신호 처리기는 해당 프로세스 ID를 사용하여 작업을 종료합니다. 그런 다음 스크립트는 핸들러를 언로드하고 절전 모드로 전환합니다.
10분의 절전 기간 동안 스크립트를 종료하지 않으면 루프가 계속해서 작업을 시작하고 핸들러를 다시 설치합니다.