ctrl-zのようなコマンドを送信してループの後にループシェルスクリプトを一時停止してから実行するにはどうすればよいですか?

ctrl-zのようなコマンドを送信してループの後にループシェルスクリプトを一時停止してから実行するにはどうすればよいですか?

ファイルを繰り返すシェルスクリプトがあります。各ファイルの処理には数時間かかることがあります(CPU / GPU制限)。場合によっては、ファイルの処理が完了したら、ループの終わりで実行を一時停止し、後で再開できるようにしたい場合があります。 Ctrl-zを押してからを使用して一時停止するのと似ていますfgが、以前は現在のループを完了したいと思います。実際に背景を一時停止/入力します。

デフォルトでは、スクリプトがctrl-z(または同様のもの)を受け取ったときに停止する前に特定の行に達するのを待ちたいと思います。これをどのように達成しますか?

ベストアンサー1

私は次のようなものを使用します:

#!/bin/bash
function catch_sig ()
{
    interrupted=1
    trap catch_sig SIGUSR1
}

interrupted=0

trap catch_sig SIGUSR1
echo "kill -s SIGUSR1 $$ to pause" 
  
while [[ there is more to do ]] ; do
   long_running_task
   if [[ 1 -eq "$interrupted" ]] ; then
        interrupted=0
        read -p "You rang? " junk
    fi
done 

次に、他の端末からkill -s SIGUSR1通知されるPIDを実行します。

man stty使用したい信号があるかどうかを読んでください。読むman signal kill pkill bash

おすすめ記事