Red Hat Bugzilla – Bug 145124
Bash appears to be mishandling sub-processes that use recycled PIDs
Last modified: 2007-12-11 09:44:39 EST
Description of problem:
Customer runs a BASH script that sleeps and executes tests in a loop.
Occasionally, sleep terminates prematurely, which causes errors.
I've found the interesting fact from strace log collected by my
reproduction. Whenever the problem happened, the pid which had been
used by the background job process right before was assigned to the
process. For instance, pid 29255 had been assigned to "test_sub.sh" in
test case at the first, nextly, it was assigned to "sleep". The sleep
process was dealed as background job. As the result, this problem
happened. In grep issue, this fact is applicable.
29255 21:28:53.966341 execve("/mnt/test/60427/testing/test_sub.sh",
["/mnt/test/60427/testing/test_sub"...], [/* 31 vars */] <unfinished ...>
229255 22:31:41.371266 execve("/bin/sleep", ["sleep", "10"], [/* 31
vars */] <unfinished ...>
Version-Release number of selected component (if applicable):
Customer has supplied scripts that reproduce the problem, they are
attached to issue 61189.
Steps to Reproduce:
1. Run test scripts
Every now and then, sleep returns prematurely.
Sleep should not return prematurely.
This has been reproduced on U1 and U2, I have requested that it be
reproduced on U4.
This is reported to have been reproduced on U4. Based on the way Bash performs
fork/exec, I think that the re-use of PIDs must be happening outside BASH.
If you execute many testcase at the same time, (of course, please change the log
file name in each testcase.), this problem happens shorter time, because pids
are re-used shorter term. In case of executing 5 testcases at the same time,
this problem has reproduced about one hour.
From comment #2 it seems that this isn't a bash problem after all?
I'm not quite sure what this is about. Could someone please explain it in more
detail? What signal is delivered? What does strace say at the time? (The
strace fragment in the original description only shows execve and no signals.)
I understand now. Thanks for the detailed strace. I am now analysing it.
This also seems to happen with bash-3.0.
Reported upstream with simplified test case.
Please try this package:
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.