Şöyle bir bash betiği var:
#!/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
Ancak komut bitene kadar her satırı işlemek, bir sonrakine geçmek çok zaman alıcıdır, örneğin 20 satır işlemeyi bitirdikten sonra 20 satır daha işlemek istiyorum.
wget LINK1 >/dev/null 2>&1 &
Komutu arka plana göndermeyi ve devam etmeyi düşündüm , ancak burada 4000 satır var, bu da performans sorunları yaşayacağım anlamına geliyor, aynı anda kaç süreç başlatmam gerektiğinden bahsetmiyorum, bu iyi değil fikir.
Şu anda düşündüğüm bir çözüm, komutlardan birinin hala çalışıp çalışmadığını kontrol etmektir, örneğin 20 satırdan sonra bu döngüyü ekleyebilirim:
while [ $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
Tabii ki bu durumda satırın sonuna & eklemeliyim! Ama bunun doğru bir yol olmadığını hissediyorum.
Peki nasıl aslında her 20 satır birlikte gruplandırmak ve sonraki 20 satır gitmeden önce bitirmek için beklemek nasıl, bu komut dosyası dinamik olarak oluşturulur, bu yüzden ben üretilirken üzerinde istediğim herhangi bir matematik yapabilirim, ama yapmak zorunda DEĞİLDİR wget kullanın, bu sadece bir örnekti, bu yüzden wget'e özgü herhangi bir çözüm bana iyi gelmeyecek.
wait
burada doğru cevaptır, ancakwhile [ $(ps …
çok daha iyi yazılırsınızwhile pkill -0 $KEYWORD…
- proktools kullanarak … yani, belirli bir ada sahip bir sürecin hala çalışıp çalışmadığını kontrol etmek için meşru nedenlerden dolayı.