当前位置:  开发笔记 > 编程语言 > 正文

Bash命令:(){:|:&};:将生成进程到内核死亡.你能解释一下语法吗?

如何解决《Bash命令:(){:|:&};:将生成进程到内核死亡.你能解释一下语法吗?》经验,为你挑选了2个好方法。

我偶然发现了这个页面,无法理解这是如何工作的.

此命令"指数生成子进程,直到您的盒子锁定".

但为什么?我不太喜欢的是冒号.

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

dbr.. 79

:(){ :|:& };:

..定义一个名为的函数:,它产生自身(两次,一个管道到另一个)和背景本身.

有换行符:

:()
{
    :|:&
};
:

:函数重命名为forkbomb:

forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb

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

$ ulimit -u 50
$ :(){ :|:& };:
-bash: fork: Resource temporarily unavailable
$

更永久地,你可以使用/etc/security/limits.conf(至少在Debian和其他人身上),例如:

* hard nproc 50

当然这意味着你只能运行50个进程,你可能希望根据机器的运行情况增加这些进程!



1> dbr..:
:(){ :|:& };:

..定义一个名为的函数:,它产生自身(两次,一个管道到另一个)和背景本身.

有换行符:

:()
{
    :|:&
};
:

:函数重命名为forkbomb:

forkbomb()
{
    forkbomb | forkbomb &
};
forkbomb

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

$ ulimit -u 50
$ :(){ :|:& };:
-bash: fork: Resource temporarily unavailable
$

更永久地,你可以使用/etc/security/limits.conf(至少在Debian和其他人身上),例如:

* hard nproc 50

当然这意味着你只能运行50个进程,你可能希望根据机器的运行情况增加这些进程!


Upvoted - 赋予:函数一个更清晰的名称正是我如何对代码进行模糊处理.
@CiroSantilli:`&&`按顺序运行命令.`|`同时运行,标准文件句柄重定向到管道.

2> Johannes Wei..:

它定义了一个:调用自身两次的函数 (代码:) : | :.它在后台(&)中完成.完成;函数定义并:启动函数后.

因此,每个实例:启动两个新的:依此类推......就像进程的二叉树一样......

用简单的C写的是:

while(1) {
    fork();
}


C等价物并不完全相同(因为每个过程在理论上会产生无限量的自身,而每个bash-forkbomb过程将"仅"产生两个过程),尽管两者都具有相同的结果.
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有