代码:
:() { :|:& }; :

为什么这个东西会让你的系统死掉???有人执行了然后问我 
让我们来分析一下这段代码,我改一下格式,但内容是一样的 代码:
:() # 定义一个叫“:”的过程 
{ # 标记过程内容的开始 
: | : & # 执行“:”这个过程,然后通过管道接到“:”再执行一次,而且每一次执行,都会在后台执行 
}; # 标记过程内容的结束,因为是同一行来写,所以要加上“;”,这样才能接后面的内容 
: # 执行:

两个原因使它死掉: 
1. 无限递归。倘若只是简单的: &,那么每次递归调用的时候一边在后台执行,而另外一边则在退出。然而,即使如此,倘若你只是下面的内容,你仍然可以看到不少bash,而且是不断地增多。其原因很可能是一边产生新的进程的同时,另外一边的进程却还没完全退出。然而,这种产生方式,终究会在某个时刻达到动态平衡,也就是新产生新进程的速度和结束进程的速度达到平衡。因而,这并不一定会让系统挂掉。 代码:
show_ps() { ps -A | grep bash; show_ps & }; show_ps

2. 平衡的破坏 
2.1 两个进程同时开始 
使用管道的时候,不是一个进程完了然后另外一个进程才开始,而是两个进程同时开始,其中一个进程读取另外一个进程的标准输出作为标准输入。 代码:
tee | grep abc

可以看到,这个时候,我们只有输入满足正则表达式abc的内容,它才会被重复。而这个过程会一直持续到我们结束tee的输入。

2.2 死机的原因:同时执行导致平衡的破坏。(注意:这只是一个简化的模型。同时执行只是理想情况,真正在执行的时候,会由于实际情况有所偏差,但由于偏差并不大,所以这个模型仍然可用;另外,现在假设每个“:”都会产生一个进程,然而实际情况是这样的:先: | : &产生一个进程,接着由于两次:的调用进而产生两个进程,再接着: | : &所在的进程消亡,如此循环,显然,实际情况只是比这个模型增加了一些自我抵销的中间环节而已) 
在: | : &执行的时候,我们知道,两个“:”是同时执行的。倘若同时有n个“:”在运行,那么,它将首先产生2*n个进程,然后这n个进程再结束掉,此时相当于新增加了2*n个进程。那从第一次调用开始,假设进程产生后马上结束,那么进程数量的变化将呈2^n的趋势变化。然而产生新进程的速度是极快的,因而在极短的时间内将会产生无数的进程。在这种情况下,死机是很正常的。

 
 
原创:
 

(转载):() { :|:& }; : # <-- 打开终端,输入这个,回车.你看到了什么??的更多相关文章

  1. 转载《Android LayoutInflater详解》

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  2. Android LayoutInflater详解

      在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且 ...

  3. Android LayoutInflater详解(转)

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  4. Android LayoutInflater详解 (转)

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  5. Android——LayoutInflater详解

    在实际工作中,事先写好的布局文件往往不能满足我们的需求,有时会根据情况在代码中自定义控件,这就需要用到LayoutInflater. LayoutInflater在Android中是"扩展& ...

  6. <转> Android LayoutInflater详解

    在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById().不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例 ...

  7. [ 转载 ] Android设计模式详解

    从Android再来认识23种设计模式 ReadyShow 关注  0.2 2018.01.06 23:18* 字数 3855 阅读 2584评论 0喜欢 20 概况来看本文章的内容 创建型:5个 单 ...

  8. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  9. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  10. Android ActionBar详解

    Android ActionBar详解 分类: Android2014-04-30 15:23 1094人阅读 评论(0) 收藏 举报 androidActionBar   目录(?)[+]   第4 ...

随机推荐

  1. 深入浅出Node.js (8) - 构建Web应用

    8.1 基础功能 8.1.1 请求方法 8.1.2 路径解析 8.1.3 查询字符串 8.1.4 Cookie 8.1.5 Session 8.1.6 缓存 8.1.7 Basic认证 8.2 数据上 ...

  2. 【转】Java如何克隆集合——深度拷贝ArrayList和HashSet

    原文网址:http://blog.csdn.net/cool_sti/article/details/21658521 原英文链接:http://javarevisited.blogspot.hk/2 ...

  3. jQuery中ajax的使用和缓存问题解决 $getjson 与$get都会被IE缓存

    原文地址:http://www.cnblogs.com/fullhouse/archive/2012/01/17/2324842.html 1:GET访问 浏览器 认为 是等幂的就是 一个相同的URL ...

  4. Paint House II 解答

    Question There are a row of n houses, each house can be painted with one of the k colors. The cost o ...

  5. IIS 问题解决

    一.网站发布后 报500错误 解决办法:重新向iis注册framwork: 二.试图加载格式不正确的程序.(Exception from HRESULT: 0x8007000B) 解决办法:对应应用程 ...

  6. tab切换jquery代码

    http://immmmm.com/jquery-tab-switch-code-improved.html html <div id="sidebar-tab">   ...

  7. PHP设计模式笔记五:策略模式 -- Rango韩老师 http://www.imooc.com/learn/236

    策略模式 1.概述:策略模式,将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,这种模式称为策略模式 例如:一个电商网站系统,针对男性女性用户要各自跳转到不同的商品类目,并且所有广告位展示不 ...

  8. 关于Go语言共享内存操作的小实例

    <strong style="margin: 0px; padding: 0px; border: 0px; font-size: 15px; font-weight: bold; c ...

  9. [MongoDB] Remove, update, create document

    Remove: remove the wand with the name of "Doom Bringer" from our wandscollection. db.wands ...

  10. 多路复用I/O select()

    select(),poll(),epoll()的总结:http://www.cnblogs.com/Anker/p/3265058.html 在socket编程中,仅仅使用connect,accept ...