linux - 这个shell脚本有什么作用?

标签 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 脚本。 这段代码的作用是什么?

不是家庭作业

最佳答案

这个脚本

  • 停用交换
  • 获取 RAM 量(以字节为单位)
  • 安装与可用 RAM 相等的 ramdisk
  • 通过 dd 将零写入 ramdisk
  • 尝试将 dd 进程设置为内存不足 killer 的首选进程
  • 打印 dd 的进程 ID 及其当前状态(只要它保持运行)

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

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

正如评论所说,最终内核内存不足 killer 将杀死该进程。

我很确定这是一件愚蠢的事情。我不知道为什么您实际上需要以这种方式将内存归零。

关于linux - 这个shell脚本有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11162210/

相关文章:

shell - 管道 qrencode 到 eog 以避免创建文件

git - **和*在glob匹配中的区别(.gitignore)

linux - getopt 命令部分解析

linux - bash,仅删除行首的一半空格

linux - 一个基于Linux OS的环境应用程序可以在另一Linux OS环境中运行吗?

linux - 在 Bash 脚本中嵌入密码

c++ - 编译 C++ 代码使其在 Windows 和 Linux 中表现相同

perl - 为什么 du 和 Perl 的 -s 给出了不同的文件大小值?

shell - shell脚本中的基本名称命令

c++ - 如何使用 fgets 获取整行