Arka planda sonsuz bir döngü nasıl çalıştırılır


17

Komut dosyasının yürütülmesine devam ederken arka planda sonsuz bir döngüyü nasıl çalıştırabilirim?

Örnek "komut dosyası":

while true; do something_in_the_background; done

do_something_while_the_loop_goes_on_in_the_background

for 1 2 3; do somethingelse; done

exit 0

Bu (dikkat &) kısa bir süre sonra tüm sistemi çöküyor gibi görünüyor:

while true; do
  something_in_the_background &
done

do_something_while_the_loop_goes_on_in_the_background

for 1 2 3; do somethingelse; done

exit 0

Şaşırmamak için çok fazla süreç yaratıyorsunuz.
Ed Heal

Çatal bomba için yol tarifi mi istiyorsun?
Baazigar

1
Arka planda sonsuz bir döngü çalıştırmanın amacını söyleyebilir misiniz?
nöron

Yanıtlar:


31

&Döngünün içi ile, arka planda yeni bir işlem başlatacak ve ilk işlemin bitmesini beklemeden tekrar yapabileceği kadar hızlı olacaktır. Bunun yerine, döngüyü arka plana koymak istediğinizi düşünüyorum, bu yüzden &döngünün kendisini

while /bin/true; do
    something_in_the_background
done &

# more stuff

10
while : ; do something ; done &
  • Daha önce Bourne mermileri yoktu trueve falseyerleşik komutlardı. truebunun yerine basitçe :ve falsebenzeri bir şeye takma ad verildi let 0.

  • & satırın sonunda süreç

  • : "help:" tarafından açıklandığı gibi null komutudur: No effect; the command does nothing. Exit Status: Always succeeds.

2
Cevabınız açıklanarak büyük ölçüde geliştirilecektir - OP, ne :anlama geldiğini bilmiyor olabilir ve muhtemelen neden &sonuna kadar taşıdığınızı bilmiyor olabilir . Ayrıca, tek astar yapmak için aralığı değiştirmek sadece kafa karıştırıcıdır - bu çok görünür ancak tamamen önemsiz bir değişikliktir.
derobert

Gönderi yorumlarınıza göre düzenlendi
John

0

Diyelim ki .1 veya .01 saniye uyku koymak, döngünüzü daha fazla CPU dostu yapar. Ancak Eric Renouf'in belirttiği gibi, döngü içinde değil, sonunda olmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.