## 遞歸函數
遞歸函數既自己調用自己,以下這個案例就是通過遞歸函數實現或者叫遞歸炸彈,他可以不斷的啟動進程消耗系統資源直到系統死機為止。
```
:() { :|:& };:
或
.() { .|.& };.
```
如果不明白它上面意思,我們可以展開來看。
```
:()
{
:|: &
}
;
:
```
其實這里就是一個遞歸函數函數名為“:”它不斷的自己調用自己啟動進程,以下詳細解釋過程。
* 第一行行說明下面要定義一個函數,函數名為冒號":",沒有可選參數。
* 第二行表示函數體開始。
* 第三行是函數體真正要做的事情,首先它遞歸調用本函數,然后利用管道調用一個新進程(它要做的事情也是遞歸調用本函數),并將其放到后臺執行。
* 第四行表示函數體結束。
* 第五行并不會執行什么操作,在命令行中用來分隔兩個命令用。從總體來看,它表明這段程序包含兩個部分,首先定義了一個函數,然后調用這個函數。
* 第六行表示調用本函數。?
那么如何防止這種炸彈函數對系統的威脅呢? 我們可以通過ulimit系統命令限制用戶的啟動最大進程數來保護我們的系統,防止炸彈函數啟動N多進程而耗盡系統資源。
```
[root@blog.puppeter.com_centos ~]# ulimit -u 709
[root@blog.puppeter.com_centos ~]# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 4864
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
```
關于炸彈函數更多請參考https://en.wikipedia.org/wiki/Fork_bomb。
- Introduction
- 1.Shell編程基礎
- 什么是Shell
- 編寫第一個Bash程序
- 2.變量
- 什么是變量
- 變量四種賦值方式
- 指定變量類型
- 變量的類型
- 特殊變量
- 3.Bash符號相關
- Bash符號相關
- 特殊符號
- 數學運算符號
- 4.內建命令與外部命令
- 內建命令與外部命令
- 5.read命令
- read命令
- 6.條件語句
- if..then..fi
- if..then..else..fi
- if..then..elif..fi
- 空命令
- 文件測試符
- 字符串判斷、與、或和非
- []與[[]]符號
- 7.Bash循環 && 分支語句
- while循環語句
- for循環
- for..in循環
- until循環
- select循環
- case分支語句
- 8.正則表達式
- 正則表達式
- 9.子Shell和受限Shell
- 子Shell
- 受限Shell
- 10.函數與函數的加載
- 函數語法與案例
- 遞歸函數
- 函數的加載
- 11.Bash腳本風格
- Bash腳本風格
- 12.Bash腳本調試
- Bash腳本調試
- 13.sed && awk
- sed
- 14.awk
- awk
- 15 Bash雜項 && 案例
- while循環的陷阱
- Bash的生命周期
- IO重定向
- /bin/bash和/bin/sh區別
- 命令雜項
- Shell加密
- 16.10.2.案例
- Bash版回收站
- 17.Bash中文速查表
- 中文速查表