次のようなbashスクリプトがあります。
#!/bin/bash
wget LINK1 >/dev/null 2>&1
wget LINK2 >/dev/null 2>&1
wget LINK3 >/dev/null 2>&1
wget LINK4 >/dev/null 2>&1
# ..
# ..
wget LINK4000 >/dev/null 2>&1
しかし、コマンドが完了するまで各行を処理してから次の行に移動するのは非常に時間がかかります。たとえば、一度に20行を処理し、終了したらさらに20行処理したいと思います。
wget LINK1 >/dev/null 2>&1 &
コマンドをバックグラウンドに送信して続行することを考えましたが、ここには4000行あります。これは、パフォーマンスの問題が発生することを意味します。同時に開始する必要があるプロセスの数に制限があるので、これは良いことではありません考え。
私が今考えている解決策の1つは、コマンドの1つがまだ実行されているかどうかを確認することです。たとえば、20行後、次のループを追加できます。
while [ $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
もちろんこの場合、行末に&を追加する必要があります。しかし、これは正しい方法ではないと感じています。
では、実際に各20行をグループ化し、それらが完了するのを待ってから次の20行に進む方法を教えてください。このスクリプトは動的に生成されるため、生成中に必要な計算をすべて実行できますが、その必要はありませんwgetを使用してください。これは単なる例であるため、wget固有のソリューションはどれも役に立ちません。
wait
ここで正解ですが、proctoolsを使用して、つまり、特定の名前のプロセスがまだ実行されているかどうかを確認する正当な理由がある場合は、while [ $(ps …
より適切に記述されます。while pkill -0 $KEYWORD…