这个shellcript做了什么?

时间:2012-06-22 18:39:02

标签: linux shell unix

#! /bin/bash
#
# clear_ram.sh - Clear as much user-space ram as possible 
#                       (until the OOM_killer gets us)
#

       swapoff -a
       mem=$(free -b | grep Mem | awk '{print $2}')
       mount none -t tmpfs -o size=$mem /tmp
       dd if=/dev/zero of=/tmp/zero.dat bs=1M &
       echo "17" > /proc/$(pidof dd)/oomadj
       while (pidof dd); do kill -USR1 $(pidof dd); done

这是一个shell脚本。 这段代码做了什么?

不是家庭作业

1 个答案:

答案 0 :(得分:3)

此脚本

  • 停用交换
  • 以字节为单位获取RAM量
  • 安装等于可用RAM的ramdisk
  • 通过dd
  • 将零写入ramdisk
  • 尝试将dd进程设置为Out of Memory杀手的斩波块上的第一个
  • 打印dd的进程ID及其当前状态,只要它一直运行

我说“尝试”因为它应该写入oom_adj而不是oomadj,至少对于最近的内核,并且因为最大值是15而不是17。

此处还有一个错误,因为它会打印执行dd所有的PID和状态,而不仅仅是脚本中的那个。

正如评论所说,最终内核Out Of Memory杀手将杀死这个过程。

我很确定这是件傻事。我不知道为什么你真的需要以这种方式零记忆。