GNU/Linux >> Linux の 問題 >  >> Linux

wget を強制的にタイムアウトにする

最も簡単な方法は、 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 プロセスを強制的に終了します。

Linux
  1. プロセスの子孫?

  2. サブシェルを黙って殺しますか?

  3. kill:コマンドが見つかりません

  1. 切り離された画面セッションを強制終了します

  2. Bashで特定のタイムアウト後に子プロセスを強制終了する方法は?

  3. kill -- -0 は何をしますか?

  1. Linuxでゾンビプロセスを強制終了する方法

  2. Linuxでの12の便利なWgetコマンドの例

  3. Linux での wget コマンドの例