mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
bpo-31160: Fix test_random for zombie process (#3045)
TestModule.test_after_fork() now calls os.waitpid() to read the exit status of the child process to avoid creating a zombie process.
This commit is contained in:
parent
e3510d74aa
commit
da5e930187
1 changed files with 7 additions and 1 deletions
|
@ -907,7 +907,9 @@ class TestModule(unittest.TestCase):
|
|||
def test_after_fork(self):
|
||||
# Test the global Random instance gets reseeded in child
|
||||
r, w = os.pipe()
|
||||
if os.fork() == 0:
|
||||
pid = os.fork()
|
||||
if pid == 0:
|
||||
# child process
|
||||
try:
|
||||
val = random.getrandbits(128)
|
||||
with open(w, "w") as f:
|
||||
|
@ -915,12 +917,16 @@ class TestModule(unittest.TestCase):
|
|||
finally:
|
||||
os._exit(0)
|
||||
else:
|
||||
# parent process
|
||||
os.close(w)
|
||||
val = random.getrandbits(128)
|
||||
with open(r, "r") as f:
|
||||
child_val = eval(f.read())
|
||||
self.assertNotEqual(val, child_val)
|
||||
|
||||
pid, status = os.waitpid(pid, 0)
|
||||
self.assertEqual(status, 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue