| """This test checks for correct wait3() behavior. | 
 | """ | 
 |  | 
 | import os | 
 | import time | 
 | import unittest | 
 | from test.fork_wait import ForkWait | 
 | from test.test_support import run_unittest, reap_children | 
 |  | 
 | try: | 
 |     os.fork | 
 | except AttributeError: | 
 |     raise unittest.SkipTest, "os.fork not defined -- skipping test_wait3" | 
 |  | 
 | try: | 
 |     os.wait3 | 
 | except AttributeError: | 
 |     raise unittest.SkipTest, "os.wait3 not defined -- skipping test_wait3" | 
 |  | 
 | class Wait3Test(ForkWait): | 
 |     def wait_impl(self, cpid): | 
 |         for i in range(10): | 
 |             # wait3() shouldn't hang, but some of the buildbots seem to hang | 
 |             # in the forking tests.  This is an attempt to fix the problem. | 
 |             spid, status, rusage = os.wait3(os.WNOHANG) | 
 |             if spid == cpid: | 
 |                 break | 
 |             time.sleep(1.0) | 
 |  | 
 |         self.assertEqual(spid, cpid) | 
 |         self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8)) | 
 |         self.assertTrue(rusage) | 
 |  | 
 | def test_main(): | 
 |     run_unittest(Wait3Test) | 
 |     reap_children() | 
 |  | 
 | if __name__ == "__main__": | 
 |     test_main() |