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

Viewed 877

Assume that my open file limit is 1024 per process,

Then how to reproduce Too Many open file error in shell script?

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

I tried above, but it opens 10 files in 10 different processes.

1 Answers

You can use ulimit -n to set the maximum number of open files to a low number, and then open up more than that number of files using exec (Remember that file descriptors 0, 1 and 2 are already open at startup):

#!/usr/bin/env bash

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

Running this produces:

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