当前位置: 首页 > 后端技术 > Python

【N种玩烂Linux的方法】垃圾代码中存在死循环

时间:2023-03-25 21:21:42 Python

本系列是查阅了无数资料,不想从头开始阅读厚厚的计算机操作系统教材的结果。既然有了一些基本概念,那我们就从破坏性实验和逆向思维入手:用垃圾代码来破坏Linux,顺便了解下系统诊断命令在各种情况下的输出。以我的智商,第一个可能破坏操作系统的代码就是死循环。先写代码。最简单的Python。defrun():i=0while(True):i+=1if__name__=="__main__":run()在linux上执行这个Python脚本。使用top查看关键信息:loadavarage的三个值开始依次递增。由于负载平均值分别代表1、5、15分钟的系统负载,因此第一位在一分钟后达到~1。表示单核cpu已满。python进程的cpu达到100%,进程所在的cpu满了。cpuidle达到93.5,说明cpu整体还是很空的。idle大致理解为空跑。晶振一直在发送时钟信号,但是没有任务可做。继续使用htop查看系统状态,可以看到10号的CPU使用率居高不下,其他的CPU都没有动静。传说中:一方有难,四面八方注视。关键信息:死循环执行一段时间后,loadavarage就全部up了,一个接一个。起来,极寒的CPU系统硬件是8核16线程。Htop显示16个CPU。一个进程会在固定的逻辑cpu中执行,不会被调度到其他cpu上。破坏代码添加的无限循环不会损坏系统,但如果另一个无限循环开始了怎么办?打开两条命令行,执行两条foreverloop代码HTOP,成功点亮第二个cpu。关键信息:第二个进程占用了另外一个逻辑CPUcore,占用率为100%loadapproaching2。看来load的值对应的是CPU逻辑core。loadto16显示所有cpu都满载TOP观察cpu相关数据的关键信息:12.5%ofus。forever循环在用户态占用cpu。2/16=12.5%86.9%oftheid表示还有很多核心空闲。14/16=87.5%