fork bomb和解决
forkbomb是一个简单的shell代码,一旦运行,很快就会用它自己填满所有可用的内存和fork空间。这是代码,记住,不要在家里尝试!
$:(){:|:&};:
为了解释发生了什么,我们需要将此代码分为几节。我们要做的第一件事是优化一个名为“:”的函数,该函数不接受任何参数。
$:(){};
然后,我们使该函数递归运行,并在后台运行其自身的另一个版本,这将创建该程序的另一个fork。
$:|:&
最后,我们从第一个函数调用开始。
$:
一旦在系统上启动了前叉炸弹,通常只能通过重新启动来停止它。治愈炸弹的唯一方法是销毁系统中所有炸弹实例。这非常困难,因为它需要运行另一个程序,由于内存空间已满,该程序无法运行。
在Linux系统上使用这种特殊的fork炸弹可以解决。如果您尝试足够多,则可以执行“不执行任何操作”流程,从而使叉式炸弹中的叉数减少了一个。继续运行这些进程,您最终将消灭炸弹,此时,什么都不做的进程将退出。
如果您的系统上已经启动了叉子炸弹,那么您可以尝试运行此Zshell命令,这通常会导致叉子炸弹在大约一分钟后退出。
while(sleep100&!)do;done
为了防止产生叉子炸弹,您可以设置用户可以运行的叉子的数量限制。尽管默认情况下并非在所有系统上都可以在/etc/security/limits.conf和PAM中完成此操作。一旦叉子炸弹达到了分叉的极限,它就简单地存在。但是,如果炸弹以root用户身份运行,则它会扩散,直到所有系统资源都被填满。