首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash命令:(){:AC.26:& };:将产生进程到内核死亡。你能解释一下语法吗?

问Bash命令:(){:AC.26:& };:将产生进程到内核死亡。你能解释一下语法吗?
EN

Stack Overflow用户
提问于 2009-02-05 13:15:59
回答 4查看 9.3K关注 0票数 40

我看了此页,不明白它是如何工作的。

这个命令“成倍地产生子进程,直到你的盒子锁定”。

但是为什么呢?我不太明白的是结肠。

user@host$ :(){ :|:& };:

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-05 13:17:47

它定义了一个名为:的函数,它两次调用自己(代码:: | :)。它在后台(&)就这样做了。在;之后,函数定义完成,函数:启动。

因此,每个实例:启动两个新的:等等.就像进程的二叉树..。

用普通C写的,即:

代码语言:javascript
复制
fork();
fork();
票数 67
EN

Stack Overflow用户

发布于 2009-02-05 13:41:50

代码语言:javascript
复制
:(){ :|:& };:

..defines是一个名为:的函数,它生成自己(两次,一次排入另一次),以及背景本身。

有断线:

代码语言:javascript
复制
:()
{
    :|:&
};
:

将:函数重命名为forkbomb

代码语言:javascript
复制
forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb

您可以通过使用ulimit来限制每个用户的进程数量来防止此类攻击:

代码语言:javascript
复制
$ ulimit -u 50
$ :(){ :|:& };:
-bash: fork: Resource temporarily unavailable
$

更永久地,您可以使用/etc/security/limits.conf (至少在Debian和其他方面),例如:

代码语言:javascript
复制
* hard nproc 50

当然,这意味着您只能运行50个进程,您可能想要增加这取决于机器正在做什么!

票数 83
EN

Stack Overflow用户

发布于 2021-06-18 09:11:08

为了补充上述问题,管道|的行为是同时创建两个进程,并将它们与pipe(管道由操作系统本身实现)连接起来,因此当我们使用管道时,每个父进程都会产生另外两个进程,从而导致系统资源的利用呈指数增长,从而使资源被更快地消耗。

此外,&用于后台进程,在本例中提示立即返回,以便下一次调用执行得更快。

结论:

|:更快地使用系统资源(以指数增长)

&:背景使进程更快地启动

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/515844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档