脚本内容
#!/bin/bash
# 构造死循环代码占用一个CPU
endless_loop() {
echo -ne "i=0; while true ;do i=i+100; i=100;done" | /usr/bin/bash &
}
# 校验参数个数
if [ $# != 2 ]; then
echo "USAGE: $0 <cpus,sleep time>"
exit 1
fi
# 根据第一个参数循环执行endless_loop占用CPU,并将进程id存入数组
for i in $(seq $1); do
endless_loop
pid_array[$i]=$!
done
# 界面给出提示,并将kill 进程id命令重定向到/tmp/cpufile.txt文件中
for i in "${pid_array[@]}"; do
echo 'execute: kill' $i
echo 'kill' $i >>/tmp/cpufile.txt
done
# 给出提示,本次脚本需要执行多少秒,如果想提前结束脚本执行ctrl+C,并且要手动去kill掉进程
echo "If executed ctrl+C,Please execute the above lines manually"
echo "Please wait $2 seconds"
sleep $2
# 执行完成后,自动从/tmp/cpufile.txt文件中读取命令kill掉占用CPU的进程
for i in $(awk '{print $2}' /tmp/cpufile.txt); do
echo "kill $i"
kill $i
done
# 清理文件
find /tmp -name cpufile.txt -delete
编写完成后给文件赋予执行权限
chmod +x yoush.sh
进行执行要先确定后怎么执行
例如:sh yoush.sh 1 80
指的是执行这个脚本用1个cpu执行80秒
想要后台执行(即关闭终端依旧执行)
要使用命令nohup
想要脚本一直执行后面的时间改为&
即nohup sh yoush.sh 1 &
报错:然而我执行的时候会有脚本输出到nohup日志的报错并跟一堆乱码
解决:新建一个文件yoush.log
执行命令 nohup sh yoush.sh > yoush.sh 2>&1 1 &
解释:把脚本输出到指定文件yoush.log 然后把2错误输出常定义为标准输出1
再报错:执行不了
解决:把时间&改为1000000很大的数能执行,原因不了解