2012-06-22 98 views
-5
#! /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脚本。 这段代码做了什么?这是什么shellScript呢?

NOT HOMEWORK

+1

它在笔记中告诉你...它清除RAM中的空间。 –

+2

这是一个用于自动降低堆栈溢出代码的脚本。 – meagar

+0

duuh,Gaz 我想要详细信息 –

回答

3

此脚本

  • 停用交换
  • 获得的RAM的数量以字节
  • 安装一个ramdisk等于可用RAM
  • 经由DD写入零到内存盘
  • 尝试将dd过程设置为第一次切碎阻塞的内存杀手
  • 打印dd进程ID和其当前状态,只要它保持运行

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

也有一个错误在这里,因为这将打印PID和状态所有执行dd,不只是一个脚本。

正如评论所说,最终内核内存不足杀手会终止进程。

我很确定这是一件愚蠢的事情。我不知道你为什么需要这样零记忆的原因。

+0

发送usr1到dd会导致它打印出它正在做的进度报告。 –

+0

@ MarcB:谢谢。我曾在某处读过这篇文章,但不得不回到手册页来确定。我编辑了我的答案。 – Sorpigal