How to resolve -bash: fork: retry: Resource temporarily unavailable in Linux ?
In Linux, we have several ways to put limitations on complete system or for a particular user.
In this article, we will discuss how to resolve -bash: fork: retry: Resource temporarily unavailable error in Linux ?
So the best way is to replicate the issue and understand its root cause.
We will first limit number of processes a user can initiate for a particular user/group and then fork processes more than the limit and observe the behavior.
To start with, we will discuss about a file called /etc/security/limits.conf.
[root@nglinux ~]# file /etc/security/limits.conf /etc/security/limits.conf: ASCII English text [root@nglinux ~]# more /etc/security/limits.conf # /etc/security/limits.conf # #Each line describes a limit for a user in the form: # #
The file imposes limits on a
a. particular domain(it could be either a user or group)
b. type is either hard(maximum limit after which usage is not allowed) or soft(soft limit after which warning starts).
c. Item could be one of the following:
# – core – limits the core file size (KB)
# – data – max data size (KB)
# – fsize – maximum filesize (KB)
# – memlock – max locked-in-memory address space (KB)
# – nofile – max number of open file descriptors
# – rss – max resident set size (KB)
# – stack – max stack size (KB)
# – cpu – max CPU time (MIN)
# – nproc – max number of processes
# – as – address space limit (KB)
# – maxlogins – max number of logins for this user
# – maxsyslogins – max number of logins on the system
# – priority – the priority to run user process with
# – locks – max number of file locks the user can hold
# – sigpending – max number of pending signals
# – msgqueue – max memory used by POSIX message queues (bytes)
# – nice – max nice priority allowed to raise to values: [-20, 19]
# – rtprio – max realtime priority
d. Value contains the value in decimal number format.
Limit number of processes i.e. nproc
Now lets check how to limit number of processes by a particular user on Linux.
1. First lets create a new user.
[root@nglinux ~]# useradd saket [root@nglinux ~]# echo nglinux | passwd --stdin saket Changing password for user saket. passwd: all authentication tokens updated successfully. [root@nglinux ~]#
2. Now lets make entry in /etc/security/limits.conf
[root@nglinux ~]# tail -3 /etc/security/limits.conf saket hard nproc 10 # End of file [root@nglinux ~]#
3. Now switch to saket user and test the scenario by creating more processes than 20 for this user.
[saket@nglinux ~]$ ps
PID TTY TIME CMD
7397 pts/0 00:00:00 bash
7426 pts/0 00:00:00 top
7432 pts/0 00:00:00 vim
7435 pts/0 00:00:00 tail
7436 pts/0 00:00:00 ps
[saket@nglinux ~]$
[saket@nglinux ~]$ for i in {1..25} ; do tail -f testfile & done
[4] 7454
[5] 7455
[6] 7456
[7] 7457
[8] 7458
[9] 7459
-bash: fork: retry: Resource temporarily unavailable
hello
hello
hello
hello
hello
hello
-bash: fork: retry: Resource temporarily unavailable
-bash: fork: retry: Resource temporarily unavailable
-bash: fork: retry: Resource temporarily unavailable
Now if you try to check the running processes you will receive error, resource temporary unavailable, it means the resources got exhausted for this particular user i.e. number of processes got exceeded.
And now you can’t even fork any other command and hence ps fails.
[saket@nglinux ~]$ ps -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: retry: Resource temporarily unavailable -bash: fork: Resource temporarily unavailable [saket@nglinux ~]$
And if you try to run the above command with any other user, you can run it successfully.
[root@nglinux2 ~]# echo "hello" > testfile
[root@nglinux2 ~]# for i in {1..25}; do tail -f testfile & done
[1] 3218
[2] 3219
[3] 3220
[4] 3221
[5] 3222
[6] 3223
hello
[7] 3224
[8] 3225
hello
[9] 3226
[10] 3227
hello
hello
hello
hello
hello
hello
[11] 3228
hello
[12] 3229
hello
[13] 3230
hello
hello
[14] 3231
[15] 3232
[16] 3233
[17] 3234
hello
hello
hello
hello
[18] 3235
hello
[19] 3236
[20] 3237
hello
[21] 3238
hello
hello
[22] 3239
hello
hello
[23] 3240
[24] 3241
[25] 3242
[root@nglinux2 ~]# ps
PID TTY TIME CMD
2328 pts/0 00:00:00 bash
3218 pts/0 00:00:00 tail
3219 pts/0 00:00:00 tail
3220 pts/0 00:00:00 tail
3221 pts/0 00:00:00 tail
3222 pts/0 00:00:00 tail
3223 pts/0 00:00:00 tail
3224 pts/0 00:00:00 tail
3225 pts/0 00:00:00 tail
3226 pts/0 00:00:00 tail
3227 pts/0 00:00:00 tail
3228 pts/0 00:00:00 tail
3229 pts/0 00:00:00 tail
3230 pts/0 00:00:00 tail
3231 pts/0 00:00:00 tail
3232 pts/0 00:00:00 tail
3233 pts/0 00:00:00 tail
3234 pts/0 00:00:00 tail
3235 pts/0 00:00:00 tail
3236 pts/0 00:00:00 tail
3237 pts/0 00:00:00 tail
3238 pts/0 00:00:00 tail
3239 pts/0 00:00:00 tail
3240 pts/0 00:00:00 tail
3241 pts/0 00:00:00 tail
3242 pts/0 00:00:00 tail
3259 pts/0 00:00:00 ps
[root@nglinux2 ~]#
Seems interesting. Just try it by yourself and do post your valuable comments here.
In case you receive similar message, you now know what to check first and resolve the issue.

When I originally commented I appear to have clicked on the -Notify me when new comments
are added- checkbox and from now on whenever a comment is added I receive 4 emails with the exact same comment.
Perhaps there is an easy method you are able to remove me from
that service? Thanks!
Feel free to surf to my homepage :: avr assembler
You can kill the processes if you dont want to logout and login using below command. [root@nglinux2 ~]# for i in {1..25}; do kill %$i; done [1] Terminated tail -f testfile [2] Terminated tail -f testfile [3] Terminated tail -f testfile [4] Terminated tail -f testfile [5] Terminated tail -f testfile [6] Terminated tail -f testfile [7] Terminated tail -f testfile [8] Terminated tail -f testfile [9] Terminated tail -f testfile [10] Terminated tail -f testfile [11] Terminated tail -f testfile [12] Terminated tail -f testfile [13] Terminated tail -f testfile [14] Terminated tail -f testfile [15] Terminated tail -f… Read more »