(self, meth, target=None)
| 587 | |
| 588 | @warnings_helper.ignore_fork_in_thread_deprecation_warnings() |
| 589 | def _kill_process(self, meth, target=None): |
| 590 | if self.TYPE == 'threads': |
| 591 | self.skipTest('test not appropriate for {}'.format(self.TYPE)) |
| 592 | |
| 593 | event = self.Event() |
| 594 | if not target: |
| 595 | target = self._sleep_some_event |
| 596 | p = self.Process(target=target, args=(event,)) |
| 597 | p.daemon = True |
| 598 | p.start() |
| 599 | |
| 600 | self.assertEqual(p.is_alive(), True) |
| 601 | self.assertIn(p, self.active_children()) |
| 602 | self.assertEqual(p.exitcode, None) |
| 603 | |
| 604 | join = TimingWrapper(p.join) |
| 605 | |
| 606 | self.assertEqual(join(0), None) |
| 607 | self.assertTimingAlmostEqual(join.elapsed, 0.0) |
| 608 | self.assertEqual(p.is_alive(), True) |
| 609 | |
| 610 | self.assertEqual(join(-1), None) |
| 611 | self.assertTimingAlmostEqual(join.elapsed, 0.0) |
| 612 | self.assertEqual(p.is_alive(), True) |
| 613 | |
| 614 | timeout = support.SHORT_TIMEOUT |
| 615 | if not event.wait(timeout): |
| 616 | p.terminate() |
| 617 | p.join() |
| 618 | self.fail(f"event not signaled in {timeout} seconds") |
| 619 | |
| 620 | meth(p) |
| 621 | |
| 622 | if hasattr(signal, 'alarm'): |
| 623 | # On the Gentoo buildbot waitpid() often seems to block forever. |
| 624 | # We use alarm() to interrupt it if it blocks for too long. |
| 625 | def handler(*args): |
| 626 | raise RuntimeError('join took too long: %s' % p) |
| 627 | old_handler = signal.signal(signal.SIGALRM, handler) |
| 628 | try: |
| 629 | signal.alarm(10) |
| 630 | self.assertEqual(join(), None) |
| 631 | finally: |
| 632 | signal.alarm(0) |
| 633 | signal.signal(signal.SIGALRM, old_handler) |
| 634 | else: |
| 635 | self.assertEqual(join(), None) |
| 636 | |
| 637 | self.assertTimingAlmostEqual(join.elapsed, 0.0) |
| 638 | |
| 639 | self.assertEqual(p.is_alive(), False) |
| 640 | self.assertNotIn(p, self.active_children()) |
| 641 | |
| 642 | p.join() |
| 643 | |
| 644 | return p.exitcode |
| 645 | |
| 646 | @warnings_helper.ignore_fork_in_thread_deprecation_warnings() |
no test coverage detected