:(){:|:&};:解释
来源:互联网 发布:java webservices 书 编辑:程序博客网 时间:2024/04/29 11:56
netman的一个签名,居然引起这么大的影响.当然小弟我也是膜拜netman的,连鸟哥都是netman的弟子^_^
转换下书写格式:
其中
(即除最后一行外)定义了一个 shell 函数,函数名是“:”,而这个函数体执行一个后台命令“: | :” ——即冒号命令(或函数,下文会解释)的输出通过管道再传给冒号命令做输入(够清楚了吧)
最后一行执行“:”命令,其实把:换成一个函数名,你应该好理解些^_^
这个代码只有在 bash 中执行才会出现不断创建进程而耗尽系统资源的严重后果,在 ksh(Korn shell)、sh(Bourne shell)中并不会出现,在 ksh87 和传统 unix Bourne shell 中冒号不能做函数名,即便是在后来的 posix sh 和 pdksh(ksh93 手边没有,没试)中冒号可以做函数名,但还是不会出现那个效果。
原因是 sh、ksh 中内置命令的优先级高于函数,所以执行“:”,总是执行内置命令“:”而不是刚才定义的那个恐怖函数。
但是在 bash 中就不一样,bash 中函数的优先级高于内置命令,所以执行“:”结果会导致不断的递归,而其中有管道操作,这就需要创建两个子进程来实现,这样就会不断的创建进程而导致资源耗尽。
需要注意的是,很多 linux 发行的 sh 命令并不是真正的 Bourne shell,而是 bash 的一个符号链接或副本。如果不能确定请不要轻易尝试用 sh 执行这段代码,否则也可能会导致资源耗尽。
CODE:
:(){ :|:&};:
转换下书写格式:
其中
(即除最后一行外)定义了一个 shell 函数,函数名是“:”,而这个函数体执行一个后台命令“: | :” ——即冒号命令(或函数,下文会解释)的输出通过管道再传给冒号命令做输入(够清楚了吧)
最后一行执行“:”命令,其实把:换成一个函数名,你应该好理解些^_^
这个代码只有在 bash 中执行才会出现不断创建进程而耗尽系统资源的严重后果,在 ksh(Korn shell)、sh(Bourne shell)中并不会出现,在 ksh87 和传统 unix Bourne shell 中冒号不能做函数名,即便是在后来的 posix sh 和 pdksh(ksh93 手边没有,没试)中冒号可以做函数名,但还是不会出现那个效果。
原因是 sh、ksh 中内置命令的优先级高于函数,所以执行“:”,总是执行内置命令“:”而不是刚才定义的那个恐怖函数。
但是在 bash 中就不一样,bash 中函数的优先级高于内置命令,所以执行“:”结果会导致不断的递归,而其中有管道操作,这就需要创建两个子进程来实现,这样就会不断的创建进程而导致资源耗尽。
需要注意的是,很多 linux 发行的 sh 命令并不是真正的 Bourne shell,而是 bash 的一个符号链接或副本。如果不能确定请不要轻易尝试用 sh 执行这段代码,否则也可能会导致资源耗尽。
- 解释
- :(){:|:&};:解释
- 解释
- 解释
- -> 解释
- 解释
- 解释解释
- IBM解释
- 端口解释
- 成语解释
- LIMIT 解释
- 端口解释
- SEH解释
- URL解释
- CMM解释
- DRM解释
- ClientId 解释
- 数据仓库解释
- C语言常用宏定义技巧(转)
- 专家预测:未来三十年互联网将会变成什么样
- WEBMIN里添加VSFTP控制模块
- 孤独
- Lucene
- :(){:|:&};:解释
- 给std map加上一件外套
- ubuntu8.04中配置java+tomcat+eclipse/MyEclipse开发环境
- 海角七号观感
- 每日IN语(2008-12-28)
- O Captain!My Captain!
- 使用CxImage库的初体验
- [VB.NET]~~~~~~~怎样来实现多表查询哦~~~~~~~~~~~~
- [VB.NET]如何在水晶报表里设置自定义纸张,如何在WinXP里设置纸张?