2012-06-22 96 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