Linux学习之脚本优先级控制

fork炸弹

在编写Shell脚本时不要写出不可控的死循环,比如func() { func | func& } ; func,简写版为.(){ .|.& };.。接下来见证一下这两条语句的威力。因为在root用户下许多资源没有限制,所以useradd userfork新建一个用户userfork,然后passwd userfork输入两遍密码设立密码。
在这里插入图片描述
使用userfork重新登录一个Shell终端,称之为B终端
Linux学习之脚本优先级控制_第1张图片
然后在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 次数
Linux学习之脚本优先级控制_第2张图片
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 讲》。

你可能感兴趣的:(Linux基础学习,linux)