fork 炸弹

fork 炸弹

偶然看到一串奇怪的命令,手贱执行了一下,没想到系统直接卡死

代码

1
alias clear=':(){ :|: &};:'

一次偶然的机会,我看到了上面这段代码,然后手贱执行了一下:

1
:(){ :|: &};:

电脑直接就卡死了,过了几分钟,我才回过神来,是这段代码导致的。

网上搜了一下,这段代码就是著名的 fork bomb 即 fork 炸弹,其会以指数级的速度快速创建线程,迅速将整个系统的资源耗尽,最终导致系统卡死。

fork 炸弹一旦引爆,基本只能重启。

代码解析

最开是看到这段代码一脸懵逼,怎么就卡死了呢,网上搜了一下,大致了解了其工作流程。

在这一行代码中,我们定义了一个名为 : 的函数:

1
:(){ :|: &};:

: 换成一个常见的函数名,比如 bomb,那么上面这段代码可以翻译为:

1
bomb(){ bomb|bomb &};bomb

再展开一下:

1
2
3
4
bomb(){ 
bomb|bomb &
};
bomb

这样看起来就直观多了,前三行定义了一个函数,第四行调用了该函数。

而函数的行为是:后台的、通过管道递归调用自身两次

由于管道操作会创建新的进程,所以每次调用函数都会产生两份拷贝,这样函数就会呈指数级的增长,可以在极短的时间内耗光计算机资源。

参考链接

fork 炸弹

评论