fork炸弹
在编写Shell脚本时不要写出不可控的死循环,比如func() { func | func& } ; func,简写版为.(){ .|.& };.。接下来见证一下这两条语句的威力。因为在root用户下许多资源没有限制,所以useradd userfork新建一个用户userfork,然后passwd userfork输入两遍密码设立密码。

使用userfork重新登录一个Shell终端,称之为B终端。

然后在B终端里边执行func() { func | func& } ; func。

若是出现-bash: fork: retry: No child processes,按下Ctrl+c,会短暂地出现命令提示符,然后接着会显示-bash: fork: retry: No child processes,因为输出太快了,所以只能截到出现命令提示符短暂出现的画面,而无法截到命令提示符和下边的-bash: fork: retry: No child processes同时出现的画面。

直到屏幕上显示-bash: fork: Resource temporarily unavailable,按下Ctrl+c,才能退出。

.(){ .|.& };.跟func() { func | func& } ; func效果一样,被称为fork炸弹。
nice和renice
nicetest.sh里边的命令如下:
#!/bin/bash
# test nice
count=1
while test ${count} -le 10
do
echo "$$ loop ${count}"
count=$[ ${count}+1 ]
sleep 30
done
这个脚本会需要循环10次,每次间歇30秒,所以这个脚本共计会执行300秒,每次循环都会输出进程号 loop 次数。

nice -n 10 ./nicetest.sh >> nicetest.out &

ps -p 24422 -o pid,ppid,nice,cmd可以看到进程24422的进程号、父进程号、nice值和命令。

renice -n -10 -p 24422可以把24422进程的nice改为-10。

此文章为7月Day 30学习笔记,内容来源于极客时间《Linux 实战技能 100 讲》。
















![网络编程 IO多路复用 [epoll版] (TCP网络聊天室)](https://img-blog.csdnimg.cn/4013737ceef2416282cdeb3c2e6a0a34.png)


