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

标签 linux shell ulimit

假设我的打开文件限制是每个进程 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

关于linux - 如何在 Shell 中重现 "Too Many open files"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62619512/

相关文章:

linux - 如何回显变量?

可以生成 Linux ARM 可执行文件的 C# 编译器

linux - 如何解决 gcc linux 中的多重定义错误?

linux - 通过 ssh 连接找不到 Bash、别名/自定义函数

node.js - 错误 : EMFILE: too many open files, watch ,除非我使用 sudo

Python:ulimit 和不错的 subprocess.call/subprocess.Popen?

linux - ll、ls 和 block 大小 M 或 G 之间哪个文件大小最准确?

java - 在 Java 中访问 shell 环境变量

arrays - 如何在循环的 shell 脚本中使用两个数组?

sockets - 打开比 `ulimit -n` 更多的服务器套接字