Saya memiliki skrip bash yang terlihat seperti ini:
#!/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
Tetapi memproses setiap baris sampai perintah selesai kemudian pindah ke yang berikutnya sangat memakan waktu, saya ingin memproses misalnya 20 baris sekaligus kemudian ketika mereka selesai 20 baris lagi diproses.
Saya berpikir wget LINK1 >/dev/null 2>&1 &untuk mengirim perintah ke latar belakang dan melanjutkan, tetapi ada 4000 baris di sini ini berarti saya akan memiliki masalah kinerja, belum lagi menjadi terbatas dalam berapa banyak proses yang harus saya mulai pada saat yang sama sehingga ini bukan yang baik ide.
Salah satu solusi yang saya pikirkan saat ini adalah memeriksa apakah salah satu perintah masih berjalan atau tidak, misalnya setelah 20 baris saya dapat menambahkan loop ini:
while [ $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
Tentu saja dalam hal ini saya harus menambahkan & ke akhir baris! Tapi saya merasa ini bukan cara yang tepat untuk melakukannya.
Jadi bagaimana saya benar-benar mengelompokkan masing-masing 20 baris bersama dan menunggu mereka untuk menyelesaikan sebelum pergi ke 20 baris berikutnya, skrip ini dihasilkan secara dinamis sehingga saya dapat melakukan matematika apa pun yang saya inginkan saat itu sedang dihasilkan, tetapi TIDAK TIDAK harus gunakan wget, itu hanya contoh jadi solusi apa pun yang spesifik wget tidak akan ada gunanya bagiku.
waitadalah jawaban yang tepat di sini, tetapi jawaban Andawhile [ $(ps …akan jauh lebih baikwhile pkill -0 $KEYWORD…- menggunakan proctools ... yaitu, untuk alasan yang sah untuk memeriksa apakah suatu proses dengan nama tertentu masih berjalan.