`
wanghailiang333
  • 浏览: 199059 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

递归经典:fork 炸蛋

阅读更多
在弄Android root的时候发现一个很有趣的东西:fork 炸蛋;(“炸”“弹”被屏蔽……)

随即去网上搜了一下,感觉非常有意思,拿出来和大家分享一下(转)

 

所谓fork炸蛋是一种在Linux操作系统下,使用shell写的恶意程序,fork炸蛋并不需要有特别的权限即可对系统造成破坏。fork炸蛋实质是一个简单的递归程序。由于程序是递归的,如果没有任何限制,这会导致这个简单的程序迅速耗尽系统里面的所有资源。

 

最简单的fork炸蛋:

 

:() { :|:& };:

 

一行看似无法理解的只有13个字符的命令,即可占用掉所有系统的资源。

 

解释:

* 第 1 行说明下面要定义一个函数,函数名为小数点,没有可选参数。<br>
* 第 2 行表示函数体开始。<br>
* 第 3 行是函数体真正要做的事情,首先它递归调用本函数,然后利用管道调用一个新进程(它要做的事情也是递归调用本函数),并将其放到后台执行。<br>
* 第 4 行表示函数体结束。<br>
* 第 5 行并不会执行什么操作,在命令行中用来分隔两个命令用。从总体来看,它表明这段程序包含两个部分,首先定义了一个函数,然后调用这个函数。<br>
* 第 6 行表示调用本函数。<br><br>
冒号”:”其实是函数名,这个bash脚本就是在不断的执行该函数,然后不断fork出新的进程。

 
0
2
分享到:
评论

相关推荐

    fj-demo:ForkJoin可视化

    与标准的ExecutorService不同,ForkJoinPool专为ForkJoinTask设计,能更高效地处理递归任务和短生命周期的任务。它的工作线程会尝试窃取其他线程未处理的子任务,从而避免了线程空闲的情况。 2. **ForkJoinTask**: ...

    Java并发Fork and join

    快速排序是一个经典的适合使用Fork/Join框架的例子。首先创建一个`RecursiveTask`来表示排序任务,任务会检查数组的大小,如果数组元素少于某个阈值,就直接排序(递归结束条件);否则,将数组一分为二,分别创建两...

    java8stream源码-ParallelProgramminginJava:大学莱斯在Coursera上的Java并行编程课程

    周:ForkJoin 框架实现 2000 万个元素的并行互易数组和 第 2 周:Java 8 Streams 过滤收集器以查找对学生数据的运行分析 第 3 周:使用线程块的并行矩阵乘法 第 4 周:使用 Phaser 实现一维迭代平均。 Phasers ...

    java Fork Join框架及使用

    Fork/Join框架特别适合处理可以递归拆分的计算密集型任务,比如大数据集的搜索、排序和其他计算。 首先,Fork/Join框架的基本操作包括“fork”和“join”两个动作。fork操作是指将一个大任务拆分为多个可以并行处理...

    Shell脚本经典之Fork炸弹的分析与预防

    Shell脚本经典中的Fork炸弹是一种恶意程序,它利用Linux或Unix系统中的`fork()`函数无限递归地创建子进程,导致系统资源被迅速耗尽,从而瘫痪系统。Fork炸弹无需高级权限就能运行,因此对系统安全构成威胁。 Fork...

    fork函数和子函数进程

    ### fork函数和子进程知识...同时,我们还探讨了`fork()`函数的一些高级应用场景,如递归创建子进程等。掌握了这些基本知识点后,开发者可以在更复杂的场景中灵活运用`fork()`函数,实现高效稳定的多进程应用程序开发。

    fork后子进程从哪里开始执行

    如果子进程也从 `main()` 函数的开头重新执行所有指令,那么它在执行到 `fork()` 时又会创建一个新的子进程,这样就会形成无限递归的进程创建过程,最终导致系统资源耗尽,电脑可能会崩溃。为了避免这种情况发生,`...

    Stream流式计算、ForkJoin和异步回调.md

    - **分治策略**:通过递归地将问题分解成较小的子问题来解决整个问题。 - **并行执行**:子问题可以在不同的线程上同时执行,从而加速整体的执行速度。 - **灵活的任务调度**:ForkJoin框架提供了灵活的任务调度机制...

    探索Java并发:Future与ForkJoin框架深度解析

    这种方法特别适合于那些可以递归分解为更小任务的大型计算密集型任务。文中通过示例详细说明了如何在Java中实现和优化这些框架的使用。特别是在处理大量数据和高性能计算时,正确地使用这些并发工具可以显著提升应用...

    forkjoin:窃取Rust的fork-join并行性库的工作

    叉连接一个窃取fork-join并行性库的工作。 受博客文章的启发,并通过硕士论文。 托管在存储库托管的图书馆文档开发该库的目的是为了满足三种类型的算法的需求,这些算法都非常适合fork-join并行性。减少风格减少样式...

    LPeg:LPeg v1.0的Fork-添加了左递归支持

    这个特定的项目是 LPeg v1.0 的一个 Fork 版本,它引入了一个重要的增强:支持左递归。在传统的正则表达式中,左递归通常是不被允许的,因为它可能导致无限循环,但在某些复杂模式匹配场景下,左递归是必不可少的。 ...

    Java并发Fork-Join框架原理

    在Fork-Join框架中,RecursiveTask是一个重要的组件,它提供了计算任务的递归分解。RecursiveTask继承自ForkJoinTask,实现了compute方法,该方法用于执行计算任务。compute方法的执行是通过fork和join方法来实现的...

    java fork-join框架介绍

    fork/join框架是ExecutorService接口的一个实现,可以帮助开发人员充分利用多核处理器的优势,编写出并行执行的程序,提高应用程序的性能;设计的目的是为了处理那些可以被递归拆分的任务。

    Two-fork-tree-storage.zip_二叉树_遍历算法

    在这个“Two-fork-tree-storage.zip”压缩包中,主要关注的是非递归算法来遍历二叉树,并打印出中序遍历序列。让我们详细探讨一下这个主题。 首先,我们要理解二叉树的基本概念。一个二叉树是由节点(或称为顶点)...

    Java中的Fork/Join框架

    设计的目的是为了处理那些可以被递归拆分的任务。  fork/join框架与其它ExecutorService的实现类相似,会给线程池中的线程分发任务,不同之处在于它使用了工作窃取算法,所谓工作窃取,指的是对那些处理完自身任务...

    Two-fork-tree-basic-operation.zip_operation

    在这个"Two-fork-tree-basic-operation.zip"压缩包中,包含了一个名为"Two fork tree basic operation.cpp"的C++源代码文件,该文件展示了二叉树的基本操作的实现。以下将详细讨论这些基本操作及其在C++中的应用。 ...

    浅谈Linux环境下并发编程中C语言fork()函数的使用

    err_exit("[fork:%d]: ",loop); else if(pid == 0){ printf("Child process\n"); } else { sleep(5); } } return 0; } ``` 这段代码在每次循环中调用`fork()`,因此会创建LEN(2)个子进程。然而,如果...

    munael

    深度Diacritization:高效的分层递归,改善阿拉伯语Diacritization COLING WANLP (2020) ; Diacritization 穆罕默德·加布里(Mohamed Gabr) , ,, 2020年 用于低资源条件的改进并行语料库过滤的得分组合 WMT...

Global site tag (gtag.js) - Google Analytics