Bu çatal bomba bana her zaman bir AI programlama öğretmeninin katıldığı ilk derslerden birinde "Özyineyi anlamak için önce özyinelemeyi anlamalısınız" demiştir.
Özünde, bu bomba özyinelemeli bir fonksiyondur. Temelde, sistem kaynakları tüketilene kadar, kendini çağıran, kendini çağıran, kendini çağıran bir işlev yaratırsınız. Bu özel örnekte, özyineleme, fonksiyonun kendisine borulanması ve arka planın kullanılmasıyla güçlendirilir.
Bunu StackOverflow'ta cevaplandığını gördüm ve orada verilen örneğin en iyi şekilde gösterdiğini düşünüyorum, çünkü bir bakışta ne yaptığını görmek daha kolay (yukarıdaki bağlantıdan çalındı ...)
☃(){ ☃|☃& };☃
☃() { ... }
Gövde kendisini çağıran bug işlevini , hata işlevini tanımlayan bug işlevini tanımlayın ve ☃|☃
sonucu arka planda bırakın &
. Ardından, işlev tanımlandıktan sonra, aslında bug işlevini çağırın ; ☃
,.
En azından Arch VM'mde, sürecin arka planında bulunma ihtiyacının, aynı sonuç sonucuna sahip olma, mevcut tüm işlem alanını tüketme ve ana bilgisayarı b0rked hale getirme zorunluluğu olmadığını unutmayın. Aslında şimdi, kaçma işlemini bazen sonlandırıyor gibi göründüğünü ve bir perdeden sonra bir -bash: fork: Resource temporarily unavailable
ile duracağını Terminated
(ve journalctl
bash core damping'i gösterdiğini) söyledim .
Csh / tcsh hakkındaki sorunuza cevap vermek için, bu kabukların hiçbiri işlevleri desteklemez, yalnızca takma ad kullanabilirsiniz. Bu kabuklar için, özyinelemeli olarak adlandıran bir kabuk betiği yazmanız gerekecek.
zsh, aynı kaderi paylaşıyor (aynı kodla), çekirdeği boşa çıkarmıyor ve Arch'ın vermesine neden oluyor Out of memory: Kill process 216 (zsh) score 0 or sacrifice child.
, ancak hala çatallanmaya devam ediyor. Bir süre sonra ifade eder Killed process 162 (systemd-logind) ...
(ve yine de çatal bıçak zsh yapmaya devam eder).
Arch'ın pacman
ksh sürümü yok gibi görünüyor , bu yüzden debian'da denemek zorunda kaldım. ksh :
, bir işlev ismi olarak nesneleri kullanır , fakat bir şey kullanmak - saymak b()
yerine istenen sonucu elde etmiş gibi görünür.