以下を実行するbashスクリプトが必要です。
- wgetを使用して3つのファイルを同時にダウンロードすると、同時に完了する必要はありません。
- 同時に3つのダウンロードをキャンセルできます
CTRL+C
(完了したダウンロードを除く)。
現在、私はwget -c URL
各端末で3つの並列インスタンスを実行しています。ただし、Linuxの再起動後に続行できるように、ユーザー入力がキャンセルされるのを待つスクリプトが必要です。
私のシステムはCygwinがインストールされているWindowsです。
ベストアンサー1
parallel
これを達成するためにGNUを使用できます。 URLを配列に入れて、次wget
を実行しますparallel
。
#!/bin/bash
urls=( "https://example.com" "https://example1.com" "https://example2.com")
parallel wget -c ::: "${urls[@]}"
Parallelはコマンドを並列に実行し、スクリプトを停止します(たとえば、Ctrl+を使用するとC並列処理が終了し、完了したインスタンスに影響を与えずに実行中の3つのwgetインスタンスがすべて終了します。
parallel
オペレーティングシステムリポジトリに見つかる必要があります。
インストールしたくない場合やインストールできない場合は、parallel
bashからローカルにインストールすることもできます。
#!/bin/bash
trap 'kill $(jobs -p)' EXIT
urls=( "https://example.com" "https://example1.com" "https://example2.com" )
for url in "${urls[@]}"; do
wget -c "$url" &
done
wait
ここでの秘密は、trap
組み込み関数(help trap
bashを参照)を使用して次のことを行います。罠kill $(jobs -p)
EXIT信号コマンド。jobs -p
現在のシェルのすべての子プロセスのPIDが返されるため、この場合は実行中のwget
プロセスのPIDになります。これらはkill
殺された場所に渡されます。したがって、スクリプトを終了するとサブスクリプトに渡されます。 +killスクリプトを使用してプロセスを終了wait
できるように終了する前に、すべてのバックグラウンドジョブの実行が完了するまでスクリプトが待機していることを確認してください。wget
CtrlC