发布于 2009-02-05 13:17:47
它定义了一个名为:的函数,它两次调用自己(代码:: | :)。它在后台(&)就这样做了。在;之后,函数定义完成,函数:启动。
因此,每个实例:启动两个新的:等等.就像进程的二叉树..。
用普通C写的,即:
fork();
fork();发布于 2009-02-05 13:41:50
:(){ :|:& };:..defines是一个名为:的函数,它生成自己(两次,一次排入另一次),以及背景本身。
有断线:
:()
{
:|:&
};
:将:函数重命名为forkbomb
forkbomb()
{
forkbomb | forkbomb &
};
forkbomb您可以通过使用ulimit来限制每个用户的进程数量来防止此类攻击:
$ ulimit -u 50
$ :(){ :|:& };:
-bash: fork: Resource temporarily unavailable
$更永久地,您可以使用/etc/security/limits.conf (至少在Debian和其他方面),例如:
* hard nproc 50当然,这意味着您只能运行50个进程,您可能想要增加这取决于机器正在做什么!
发布于 2021-06-18 09:11:08
为了补充上述问题,管道|的行为是同时创建两个进程,并将它们与pipe(管道由操作系统本身实现)连接起来,因此当我们使用管道时,每个父进程都会产生另外两个进程,从而导致系统资源的利用呈指数增长,从而使资源被更快地消耗。
此外,&用于后台进程,在本例中提示立即返回,以便下一次调用执行得更快。

结论:
|:更快地使用系统资源(以指数增长)
&:背景使进程更快地启动
https://stackoverflow.com/questions/515844
复制相似问题