Neden “: () {: |: &} ;:” komutu sistemimi o kadar geciktirdi ki yeniden başlatmam gerekiyordu?


286

TEHLİKE!

Bir çökmeye hazırlanmadığınız ve / veya sisteminizi yeniden başlatmaya zorlamadığınız sürece bu komutu çalıştırmayınız.

Bir uygulamayı derlemeye çalıştığımda 12.04 çalıştıran Virtualbox'ımdaydım ve beklerken bir yorumun söylediği bir forumda şansa rastladım:

Siz de :(){ :|: & };:
Fun'ı deneyin ve kök gerektirmez.

Düşünmeden gnome-terminalimde koştum. 12.04 (Virtualbox'da) gecikmeme neden oldu, kapatmak zorunda kaldım.

Sorum şu ki bu komut ne işe yarıyor?

: () {: |: &} ;:



1
Ayrıca eski bir konuya bakın: ubuntuforums.org/showthread.php?t=1392511
Paddy Landau



9
"çok kötü bir şekilde gecikme" oldukça iyimser.
pstadler

Yanıtlar:


372

Bu denir çatal bomba .

:() bir işlev tanımladığınız anlamına gelir. :

{:|: &}işlevi çalıştırmak :ve çıktısını :tekrar işleve göndermek ve arka planda çalıştırmak anlamına gelir .

Bu ;bir komut ayırıcıdır.

: işlevi ilk kez çalıştırır.

Temel olarak, her aramada iki kez kendisini çağıran ve kendisini sonlandırmanın bir yolu olmayan bir işlev yaratıyorsunuz. Sistem kaynakları tükenene kadar ikiye katlanmaya devam edecek.

Virtualbox'ta çalıştırmak gerçekten çok mantıklıydı, aksi halde PC'nizi yeniden başlatmanız gerekecekti.


27
Bu cevap, yeniden başlatmanın tek yol olduğunu gösteriyor gibi görünüyor . Fakat aslında bu çatal bomba yeniden başlatmadan öldürülebilir ve aslında bazı sistemlerde düzgün çalışmadığını gözlemledim.
Konrad Rudolph

27
Aslında, tam bir açıklama için bu muhtemelen ;bir komut ayırıcı olduğunu belirtmelidir . { ... }Kısım sadece fonksiyonun içeriğidir.
12'de bir CVn

@ MichaelKjörling +1 Yorumlarınızı dikkate almadan sözdizimini bile anlamadım.
jumpnett

1
@ SüperMatt Bu sorunun hala aktif olup olmadığını bilmiyorum, ama yine de ne yapacağını |ve ne yaptığını bilmek istedim &. Fonksiyonun çalışmasını sağladığını anlıyorum ama bu ikisinin ne yaptığını bilmek istedim
Noober

1
@Noober eğer hala merak ediyorsanız (ben bu veciz ve şifreli belgelerin kara deliğindeyim) biliyorum! | bu, bir komuttan sonra çıkarılan komutları girdi olarak takip eden komuta girdi olarak gönderilen bir borudır. & bir çatal, önceki komut için daha fazla komut çalıştırmaya devam etmek için mevcut iş parçacığını bırakarak yeni bir iş parçacığı yaratır
flurbius

179

Bu kabukta uygulanan çatal bomba denir .

wikipedia'dan:

:(){ :|:& };:
\_/| |||| ||\- ... the function ':', initiating a chain-reaction: each ':' will start    two more.
 | | |||| |\- Definition ends now, to be able to run ...
 | | |||| \- End of function-block
 | | |||\- disown the functions (make them a background process), so that the children    of a parent
 | | |||   will not be killed when the parent gets auto-killed
 | | ||\- ... another copy of the ':'-function, which has to be loaded into memory.
 | | ||   So, ':|:' simply loads two copies of the function, whenever ':' is called
 | | |\- ... and pipe its output to ...
 | | \- Load a copy of the function ':' into memory ...
 | \- Begin of function-definition
 \- Define the function ':' without any parameters '()' as follows:

3
Her ne kadar teğet bir nokta olsa da 'uzaklaşma' terimi aşırı yüklenebilse de, teknik olarak, arka plana yerleştirilen bir işlem engellenmemekte ve 'fg' komutu ile her zaman ön plana çıkarılabilmektedir ve eğer kullanıcı oturumu kapatır (oturumu kapatmak için hala kaynaklar varsa) .... bir süreç veya iş ilanı üzerinde 'disown' olana kadar ve olmadıkça . Bundan sonra gerçekten reddedilir: oturumu kapatmak sona ermeyecek ve fg'nin bir etkisi olmayacaktır.
Rondo,

1
Sadece küçük bir nokta olsa da parantezler bash benzeri kabuklarda hiçbir parametre olmadığı anlamına gelmez, sadece C tarzı dillerden geriye kalan süslemelerdir.
Charlie Harding,

75

Bu komut çatal bombanın bilinen bir versiyonudur.

wikipedia'dan çatal bomba resmi

Bilgisayarınızın sonsuz bir işlem başlatarak belleği tükenmesine neden olur. Buna karşı kullanabileceğiniz bazı güvenceler de var:

Unix tipi sistemler tipik olarak ulimit kabuk komutu veya halefi olan setrlimit tarafından kontrol edilen bir işlem sınırına sahiptir. Linux çekirdekleri, bir sürecin RLIMIT_NPROC rlimitini ("kaynak sınırı") belirler ve uygular. Bir işlem bir çatal gerçekleştirmeye çalışırsa ve bu işlemin sahibi olan kullanıcı zaten RLIMIT_NPROCişlemlere sahipse, çatal başarısız olur. Ek olarak, Linux veya * BSD'de, pam_limitsyapılandırma dosyası /etc/security/limits.confaynı etkiye göre düzenlenebilir. Ancak, Linux'un tüm dağıtımlarında pam_limitsmodül varsayılan olarak kurulu değildir.


18

Göre bu :(){ :|: & };: denir

Forkbomb bir tür şiirsel virüs yaratıcısıdır.

... Bu küçük program, kendisine birden çok kopya çıkarmasını, zincirleme bir tepki vermesini ve böylece sistemin kaynaklarını hızla tüketmesini emreder ...

Bu yüzden çalıştırılmaması önerilir, donanıma zarar verebilir, çünkü döngüsel olarak yürütmeye neden olabilir, dizüstü bilgisayarlarda kolayca ısınmaya neden olabilir.

Başka bir bağlantı burada ekran görüntüleri ile açıklar .


59
Çatal bomba donanımın zarar görmesine neden olursa , çok daha büyük ve daha derin bir sorununuz olur.
12'de bir CVn

38
Belki de bilgisayarınızın yakınında patlayabilecek çatal şeklinde bir bombadan bahsediyordu?
dysoco 18

2
Ekran görüntüsü için bağlantı koptu.
IMustBeSomeone

0

Yukarıda açıklandığı gibi “ çatal bomba ” olarak adlandırılır ve bunu yapmanın başka bir yolu da boru tesisatı yerine arka plan işlemini kullanmak olacaktı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.