Linux 如何在Shell中重现“打开的文件太多”错误

Linux 如何在Shell中重现“打开的文件太多”错误,linux,shell,ulimit,Linux,Shell,Ulimit,假设每个进程的打开文件限制为1024 那么如何在shell脚本中重现太多的打开文件错误呢 #!/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将打开的文件的最大数量

假设每个进程的打开文件限制为1024

那么如何在shell脚本中重现太多的打开文件错误呢

#!/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
您可以使用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

我猜在1024之前,数字文件描述符就会用光了。@tripleee这就是为什么你将它设置为一个较低的数字来触发它,而不必打开那么多的文件,我想这肯定是为了某个东西的测试用例;我只是说如果你真的想用1024而不是人为的下限来测试,你需要一种不同的方法。我不是在一个可以测试的地方,但我想你可以重定向一个shell内置而不是tail,或者在一个循环中嵌套大量的read语句。我想你会在1024之前用完数字文件描述符,尽管如此。@tripleee这就是为什么你将它设置为一个较低的数字来触发它,而不必打开那么多的文件,我想这是一个测试用例,肯定是这样的;我只是说如果你真的想用1024而不是人为的下限来测试,你需要一种不同的方法。我不是在一个可以进行测试的地方,但我想你可以重定向一个shell内置而不是tail,或者在一个循环中嵌套大量的read语句。