2017-12-10 14 views
1

なぜバッシュフォークボムにパイプが必要ですか?古典bashのフォーク爆弾の場合

:(){ :& };: 

を実行し、それはすぐに終了します。

:(){ :|:& };: 

私は次のように変更します。私の理解では、:関数は子プロセスをバックグラウンドで再帰的に作成すべきです。それはなぜ機能しないのですか?

+0

これは役に立つかもしれません:[このbashフォークボムはどうやって動作するのですか?](0120-333-100) – Cyrus

+0

* [sashの他のバージョンのbashフォーク爆弾作業?](https://stackoverflow.com/a/8394535/6136214)も良いですが、それはpipeを持っていると持っていないことの間に何があるのか​​を説明するのに役立つかもしれないforkbombの両方のクラスのいくつかのpseudo process treeピクチャを持っていますそれ。 – agc

答えて

0

機能の一つだけ再帰パスが:()

が常にありますので、オリジナルのフォーク爆弾はすぐにシステムリソースを使用して、同時にすべての呼び出しを2以上のインスタンスを起動します。しかし、あなたの変更されたバージョンは一回しか呼び出されず、単純な再帰を行います。おそらく、スタックをオーバーフローさせ、それ以上の害を及ぼさないでしょう。

+0

':(){:; } 'は、バックグラウンドプロセスをフォークするものではなく、コールスタックをオーバーフローさせます。 – chepner

+0

@chepnerどこが間違っていますか? – iBug

+0

あなたの最初の文( '' '' '' '' ''の実行中のインスタンスは1つだけです)はあなたの最後の文と矛盾します。 – chepner

関連する問題