| 
									
										
										
										
											2000-02-25 19:25:05 +00:00
										 |  |  | """This test checks for correct fork() behavior.
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-20 06:30:08 +00:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2006-07-07 06:03:15 +00:00
										 |  |  | import time | 
					
						
							| 
									
										
										
										
											2006-03-20 06:30:08 +00:00
										 |  |  | from test.fork_wait import ForkWait | 
					
						
							| 
									
										
										
										
											2006-06-29 04:10:08 +00:00
										 |  |  | from test.test_support import TestSkipped, run_unittest, reap_children | 
					
						
							| 
									
										
										
										
											2000-02-25 19:25:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-05-04 00:36:42 +00:00
										 |  |  | try: | 
					
						
							|  |  |  |     os.fork | 
					
						
							|  |  |  | except AttributeError: | 
					
						
							| 
									
										
										
										
											2000-08-04 13:34:43 +00:00
										 |  |  |     raise TestSkipped, "os.fork not defined -- skipping test_fork1" | 
					
						
							| 
									
										
										
										
											2000-05-04 00:36:42 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-20 06:30:08 +00:00
										 |  |  | class ForkTest(ForkWait): | 
					
						
							|  |  |  |     def wait_impl(self, cpid): | 
					
						
							| 
									
										
										
										
											2006-07-07 06:03:15 +00:00
										 |  |  |         for i in range(10): | 
					
						
							|  |  |  |             # waitpid() 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 = os.waitpid(cpid, os.WNOHANG) | 
					
						
							|  |  |  |             if spid == cpid: | 
					
						
							|  |  |  |                 break | 
					
						
							|  |  |  |             time.sleep(1.0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-20 06:30:08 +00:00
										 |  |  |         self.assertEqual(spid, cpid) | 
					
						
							|  |  |  |         self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_main(): | 
					
						
							|  |  |  |     run_unittest(ForkTest) | 
					
						
							| 
									
										
										
										
											2006-06-29 04:10:08 +00:00
										 |  |  |     reap_children() | 
					
						
							| 
									
										
										
										
											2000-02-25 19:25:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-03-20 06:30:08 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     test_main() |