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分のスリープ期間中にスクリプトを終了しないと、ループは引き続き作業を開始し、ハンドラーを再インストールします。