17db96d56Sopenharmony_ci"""This test checks for correct wait4() behavior. 27db96d56Sopenharmony_ci""" 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ciimport os 57db96d56Sopenharmony_ciimport time 67db96d56Sopenharmony_ciimport sys 77db96d56Sopenharmony_ciimport unittest 87db96d56Sopenharmony_cifrom test.fork_wait import ForkWait 97db96d56Sopenharmony_cifrom test import support 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci# If either of these do not exist, skip this test. 127db96d56Sopenharmony_ciif not support.has_fork_support: 137db96d56Sopenharmony_ci raise unittest.SkipTest("requires working os.fork()") 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_cisupport.get_attribute(os, 'wait4') 167db96d56Sopenharmony_ci 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ciclass Wait4Test(ForkWait): 197db96d56Sopenharmony_ci def wait_impl(self, cpid, *, exitcode): 207db96d56Sopenharmony_ci option = os.WNOHANG 217db96d56Sopenharmony_ci if sys.platform.startswith('aix'): 227db96d56Sopenharmony_ci # Issue #11185: wait4 is broken on AIX and will always return 0 237db96d56Sopenharmony_ci # with WNOHANG. 247db96d56Sopenharmony_ci option = 0 257db96d56Sopenharmony_ci deadline = time.monotonic() + support.SHORT_TIMEOUT 267db96d56Sopenharmony_ci while time.monotonic() <= deadline: 277db96d56Sopenharmony_ci # wait4() shouldn't hang, but some of the buildbots seem to hang 287db96d56Sopenharmony_ci # in the forking tests. This is an attempt to fix the problem. 297db96d56Sopenharmony_ci spid, status, rusage = os.wait4(cpid, option) 307db96d56Sopenharmony_ci if spid == cpid: 317db96d56Sopenharmony_ci break 327db96d56Sopenharmony_ci time.sleep(0.1) 337db96d56Sopenharmony_ci self.assertEqual(spid, cpid) 347db96d56Sopenharmony_ci self.assertEqual(os.waitstatus_to_exitcode(status), exitcode) 357db96d56Sopenharmony_ci self.assertTrue(rusage) 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_cidef tearDownModule(): 387db96d56Sopenharmony_ci support.reap_children() 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ciif __name__ == "__main__": 417db96d56Sopenharmony_ci unittest.main() 42