最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Shell腳本經(jīng)典之Fork炸彈的分析與預(yù)防

 更新時(shí)間:2017年06月22日 14:53:13   作者:Carey  
這篇文章主要給大家介紹了Shell腳本經(jīng)典之Fork炸彈的分析與預(yù)防,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。

fork炸彈介紹

眾所周知,bash是一款極其強(qiáng)大的shell,提供了強(qiáng)大的交互與編程功能。這樣的一款shell中自然不會(huì)缺少函數(shù)這個(gè)元素來幫助程序進(jìn)行模塊化的高效開發(fā)與管理。于是產(chǎn)生了由于其特殊的特性,bash擁有了fork炸彈。Jaromil在2002年設(shè)計(jì)了最為精簡(jiǎn)的一個(gè)fork炸彈的實(shí)現(xiàn)。

所謂fork炸彈是一種惡意程序,它的內(nèi)部是一個(gè)不斷在fork進(jìn)程的無限循環(huán),fork炸彈并不需要有特別的權(quán)限即可對(duì)系統(tǒng)造成破壞。fork炸彈實(shí)質(zhì)是一個(gè)簡(jiǎn)單的遞歸程序。由于程序是遞歸的,如果沒有任何限制,這會(huì)導(dǎo)致這個(gè)簡(jiǎn)單的程序迅速耗盡系統(tǒng)里面的所有資源。

現(xiàn)在來看看Jaromil設(shè)計(jì)的最簡(jiǎn)單的fork炸彈

fork炸彈分析

:() { :|:& };:

一行看似無法理解的只有13個(gè)字符的命令,即可占用掉所有系統(tǒng)的資源。其實(shí),這行命令如果這樣寫成bash script就不難理解了

:()
{
 :|:&
}
;
:
  • 第 1 行 說明下面要定義一個(gè)函數(shù),函數(shù)名為小數(shù)點(diǎn),沒有可選參數(shù)。
  • 第 2 行 表示函數(shù)體開始。
  • 第 3 行 是函數(shù)體真正要做的事情,首先它遞歸調(diào)用本函數(shù),然后利用管道調(diào)用一個(gè)新進(jìn)程(它要做的事情也是遞歸調(diào)用本函數(shù)),并將其放到后臺(tái)執(zhí)行。
  • 第 4 行 表示函數(shù)體結(jié)束。
  • 第 5 行 并不會(huì)執(zhí)行什么操作,在命令行中用來分隔兩個(gè)命令用。從總體來看,它表明這段程序包含兩個(gè)部分,首先定義了一個(gè)函數(shù),然后調(diào)用這個(gè)函數(shù)。
  • 第 6 行 表示調(diào)用本函數(shù)。

冒號(hào)”:”其實(shí)是函數(shù)名,這個(gè)bash腳本就是在不斷的執(zhí)行該函數(shù),然后不斷fork出新的進(jìn)程。

fork炸彈預(yù)防

那么,有沒有辦法扼制這種情況的發(fā)生呢?答案是肯定的,只需設(shè)置進(jìn)程的limit數(shù)即可。

$ ulimit -u 128
$ ulimit -a
core file size   (blocks, -c) 0
data seg size   (kbytes, -d) unlimited
max nice      (-e) 20
file size    (blocks, -f) unlimited
pending signals     (-i) unlimited
max locked memory  (kbytes, -l) unlimited
max memory size   (kbytes, -m) unlimited
open files      (-n) 1024
pipe size   (512 bytes, -p) 8
POSIX message queues  (bytes, -q) unlimited
max rt priority     (-r) unlimited
stack size    (kbytes, -s) 8192
cpu time    (seconds, -t) unlimited
max user processes    (-u) 128
virtual memory   (kbytes, -v) unlimited
file locks      (-x) unlimited

在上面的例子中,我們將用戶可以創(chuàng)建的最大進(jìn)程數(shù)限制為 128,執(zhí)行fork炸彈會(huì)迅速fork出大量進(jìn)程,此后會(huì)由于資源不足而無法繼續(xù)執(zhí)行。使用工具ulimit即可設(shè)置各種限制數(shù),具體的請(qǐng)參考該工具的man或help。

fork 炸彈讓我們認(rèn)識(shí)到了遞歸函數(shù)的強(qiáng)大功能,同時(shí)也意識(shí)到一旦使用不當(dāng),遞歸函數(shù)所造成的破壞將是巨大的。實(shí)際上,fork 炸彈只是一個(gè)非常簡(jiǎn)單的遞歸函數(shù),它并不涉及參數(shù)傳遞、返回值等問題,而這些問題在使用bash編程時(shí)是否有完善的支持呢?在bash中編寫遞歸函數(shù)時(shí)應(yīng)該注意相關(guān)問題。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • jar包重啟shell腳本問題記錄

    jar包重啟shell腳本問題記錄

    工作中經(jīng)常需要重啟jar包,這里寫一個(gè)restart.sh文件,記錄一下,對(duì)shell腳本重啟jar包知識(shí)感興趣的朋友一起看看吧
    2024-02-02
  • 用Shell判斷字符串包含關(guān)系的方法小結(jié)

    用Shell判斷字符串包含關(guān)系的方法小結(jié)

    這篇文章主要給大家介紹了關(guān)于用Shell判斷字符串包含關(guān)系的幾種方法,其中包括利用grep查找、利用字符串運(yùn)算符、利用通配符、利用case in 語句以及利用替換等方法,每個(gè)方法都給出了詳細(xì)的示例代碼與介紹,有需要的朋友們可以參考參考借鑒,下面來一起看看吧。
    2016-12-12
  • Shell中字符串排序的幾種方法

    Shell中字符串排序的幾種方法

    今天小編就為大家分享一篇關(guān)于Shell中字符串排序的幾種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • linux 開機(jī)自啟動(dòng)redis服務(wù)的方法

    linux 開機(jī)自啟動(dòng)redis服務(wù)的方法

    這篇文章主要介紹了linux 開機(jī)自啟動(dòng)redis服務(wù)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Vim命令合集

    Vim命令合集

    這篇文章主要介紹了Vim命令合集的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Python執(zhí)行Linux系統(tǒng)命令的4種方法

    Python執(zhí)行Linux系統(tǒng)命令的4種方法

    這篇文章主要介紹了Python執(zhí)行Linux系統(tǒng)命令的4種方法,即在Python腳本中調(diào)用Shell命令,需要的朋友可以參考下
    2014-10-10
  • 一個(gè)shell小案例(創(chuàng)建日期目錄)

    一個(gè)shell小案例(創(chuàng)建日期目錄)

    需要在多個(gè)目錄中 (如:beijing shanghai tianjin guangzhou 等等) 創(chuàng)建子目錄(以年份命名),然后進(jìn)入子目錄,新建目錄并以當(dāng)天的日期命名
    2016-08-08
  • 列出所有Bash Shell內(nèi)置命令的方法示例

    列出所有Bash Shell內(nèi)置命令的方法示例

    大家都知道不同的Shell內(nèi)置命令有所不同,所以下面這篇文章主要給大家介紹了關(guān)于如何列出所有Bash Shell內(nèi)置命令的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • Linux 中(加、減、乘、除)實(shí)例詳解

    Linux 中(加、減、乘、除)實(shí)例詳解

    這篇文章主要介紹了 Linux 中(加、減、乘、除)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 關(guān)于SSH 遠(yuǎn)程執(zhí)行命令你要知道的二三事

    關(guān)于SSH 遠(yuǎn)程執(zhí)行命令你要知道的二三事

    SSH 是 Linux 下進(jìn)行遠(yuǎn)程連接的基本工具,但是如果僅僅用它來登錄那可是太浪費(fèi)啦!SSH 命令可是完成遠(yuǎn)程操作的神器啊,下面這篇文章主要給大家介紹了關(guān)于SSH 遠(yuǎn)程執(zhí)行命令的一些相關(guān)資料,需要的朋友可以參考下。
    2017-07-07

最新評(píng)論

若羌县| 贡嘎县| 红安县| 鲜城| 临沭县| 普兰县| 木兰县| 泰和县| 昌邑市| 盘山县| 太白县| 龙南县| 天气| 清流县| 襄樊市| 仁布县| 阜阳市| 临猗县| 托克托县| 宁津县| 宁明县| 尚志市| 临泽县| 望奎县| 长沙市| 桃园县| 莱西市| 邻水| 濉溪县| 涟水县| 沁源县| 博客| 仁布县| 金平| 盐源县| 建湖县| 江油市| 沈阳市| 中宁县| 商水县| 罗城|