(self, meth)
| 521 | time.sleep(delay) |
| 522 | |
| 523 | def _kill_process(self, meth): |
| 524 | if self.TYPE == 'threads': |
| 525 | self.skipTest('test not appropriate for {}'.format(self.TYPE)) |
| 526 | |
| 527 | event = self.Event() |
| 528 | p = self.Process(target=self._sleep_some_event, args=(event,)) |
| 529 | p.daemon = True |
| 530 | p.start() |
| 531 | |
| 532 | self.assertEqual(p.is_alive(), True) |
| 533 | self.assertIn(p, self.active_children()) |
| 534 | self.assertEqual(p.exitcode, None) |
| 535 | |
| 536 | join = TimingWrapper(p.join) |
| 537 | |
| 538 | self.assertEqual(join(0), None) |
| 539 | self.assertTimingAlmostEqual(join.elapsed, 0.0) |
| 540 | self.assertEqual(p.is_alive(), True) |
| 541 | |
| 542 | self.assertEqual(join(-1), None) |
| 543 | self.assertTimingAlmostEqual(join.elapsed, 0.0) |
| 544 | self.assertEqual(p.is_alive(), True) |
| 545 | |
| 546 | timeout = support.SHORT_TIMEOUT |
| 547 | if not event.wait(timeout): |
| 548 | p.terminate() |
| 549 | p.join() |
| 550 | self.fail(f"event not signaled in {timeout} seconds") |
| 551 | |
| 552 | meth(p) |
| 553 | |
| 554 | if hasattr(signal, 'alarm'): |
| 555 | # On the Gentoo buildbot waitpid() often seems to block forever. |
| 556 | # We use alarm() to interrupt it if it blocks for too long. |
| 557 | def handler(*args): |
| 558 | raise RuntimeError('join took too long: %s' % p) |
| 559 | old_handler = signal.signal(signal.SIGALRM, handler) |
| 560 | try: |
| 561 | signal.alarm(10) |
| 562 | self.assertEqual(join(), None) |
| 563 | finally: |
| 564 | signal.alarm(0) |
| 565 | signal.signal(signal.SIGALRM, old_handler) |
| 566 | else: |
| 567 | self.assertEqual(join(), None) |
| 568 | |
| 569 | self.assertTimingAlmostEqual(join.elapsed, 0.0) |
| 570 | |
| 571 | self.assertEqual(p.is_alive(), False) |
| 572 | self.assertNotIn(p, self.active_children()) |
| 573 | |
| 574 | p.join() |
| 575 | |
| 576 | return p.exitcode |
| 577 | |
| 578 | def test_terminate(self): |
| 579 | exitcode = self._kill_process(multiprocessing.Process.terminate) |
no test coverage detected