test_wait4.py revision 4710c53dcad1ebf3755f3efb9e80ac24bd72a9b2
1"""This test checks for correct wait4() behavior.
2"""
3
4import os
5import time
6from test.fork_wait import ForkWait
7from test.test_support import run_unittest, reap_children, get_attribute
8
9# If either of these do not exist, skip this test.
10get_attribute(os, 'fork')
11get_attribute(os, 'wait4')
12
13
14class Wait4Test(ForkWait):
15    def wait_impl(self, cpid):
16        for i in range(10):
17            # wait4() shouldn't hang, but some of the buildbots seem to hang
18            # in the forking tests.  This is an attempt to fix the problem.
19            spid, status, rusage = os.wait4(cpid, os.WNOHANG)
20            if spid == cpid:
21                break
22            time.sleep(1.0)
23        self.assertEqual(spid, cpid)
24        self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8))
25        self.assertTrue(rusage)
26
27def test_main():
28    run_unittest(Wait4Test)
29    reap_children()
30
31if __name__ == "__main__":
32    test_main()
33