A user is getting the following message when they try to run a particular program.
timer_create: Resource temporarily unavailable
From this StackOverflow Q&A titled: timer_create() : -1 EAGAIN (Resource temporarily unavailable), I discovered that this has to do with running out of space for pending signals. I confirmed this using a separate user account by running this command:
$ ulimit -i 0
and checking that I get the same error, which indeed I do. With this command:
$ ulimit -i 1
or any higher amount there is no error.
When the original user runs ulimit -i
they get 127368. Thus I concluded that they had run out of space for pending signals somehow.
What is going on? Does it mean that one or more running programs has consumed these? If so how do I find out which ones?
/proc
. Since we're talking about one user here, how about looking for that user's processes and only searching for thestatus
file of those? You can get a list of PIDs for processes started by a single user withps -u user_name -o pid=
– Joseph R. Jul 16 '13 at 21:16ps -eo user,pending,command
for example but I didn't know how to interpret it. I have a command which has ShdPnd of0000000200000000
. Do you know what this "bitmap of pending signals" means? Clearly it's not zero, but I don't know how many it is! – Tom Ellis Jul 16 '13 at 21:16ps
command to get the numbers, was longer than the time it tookfind
to trawl through the process tree (in my case). – EightBitTony Jul 16 '13 at 21:35find
whenever possible. – Joseph R. Jul 16 '13 at 21:38man 5 proc
then, because these are definitely not signal counts.man 1 ps
makes it very clear they are masks. However, a couple of lines above isSigQ: 127368/127368
! So indeed I can see that the signal count has hit its limit, but unfortunately this is a user-wide count -- it's the same for all this user's processes. I still can't tell which process in particular is responsible. – Tom Ellis Jul 17 '13 at 07:29