如何在 Shell 中重现 "Too Many open files" 错误

How to reproduce "Too Many open files" error in Shell

假设我的打开文件限制是每个进程 1024,

那么如何在 shell 脚本中重现 Too Many open file 错误?

#!/bin/bash
a=0
while [ "$a" -lt 10 ]
do
   echo "Welcome $i times"
 a=`expr $a + 1`
   tail -f /dev/null > myfile$a &
done

我在上面试过了,但是它在 10 个不同的进程中打开了 10 个文件。

您可以使用 ulimit -n 将最大打开文件数设置为较低的数字,然后使用 exec 打开超过该数量的文件(记住文件描述符 0、1和 2 个在启动时已经打开):

#!/usr/bin/env bash

ulimit -n 5
exec 3</dev/null
exec 4</dev/null
exec 5</dev/null
exec 6</dev/null

运行 这会产生:

foo.sh: line 6: /dev/null: Too many open files
foo.sh: line 7: /dev/null: Too many open files