最も簡単な方法は、 timeout(1)
を使用することです コマンドは、GNU coreutils の一部であるため、bash がインストールされているほぼすべての場所で使用できます:
timeout 60 wget ..various wget args..
または、実行時間が長すぎる場合に wget をハードキルしたい場合:
timeout -s KILL 60 wget ..various wget args..
バックグラウンド プロセスとして wget コマンドを実行し、SIGKILL を送信して、一定時間スリープした後に強制終了することができます。
wget ... &
wget_pid=$!
counter=0
timeout=60
while [[ -n $(ps -e) | grep "$wget_pid") && "$counter" -lt "$timeout" ]]
do
sleep 1
counter=$(($counter+1))
done
if [[ -n $(ps -e) | grep "$wget_pid") ]]; then
kill -s SIGKILL "$wget_pid"
fi
説明:
wget ... &
-&
最後の表記は、フォアグラウンドではなくバックグラウンドでコマンドを実行しますwget_pid=$!
-$!
最後に実行されたコマンドのプロセス ID を含む特別なシェル変数です。ここでは、wget_pid
という変数に保存します。 .while [[ -n $(ps -e) | grep "$wget_pid") && "$counter" -lt "$timeout" ]]
- 1 秒ごとにプロセスを探します。プロセスがまだ存在する場合は、タイムアウト制限まで待機します。kill -s SIGKILL "$wget_pid"
-kill
を使用します SIGKILL シグナルを送信して、バックグラウンドで実行されている wget プロセスを強制的に終了します。