| 64 | self._send_signal(signal.SIGKILL) |
| 65 | |
| 66 | def _launch(self, process_obj): |
| 67 | code = 1 |
| 68 | parent_r, child_w = os.pipe() |
| 69 | child_r, parent_w = os.pipe() |
| 70 | self.pid = os.fork() |
| 71 | if self.pid == 0: |
| 72 | try: |
| 73 | atexit._clear() |
| 74 | atexit.register(util._exit_function) |
| 75 | os.close(parent_r) |
| 76 | os.close(parent_w) |
| 77 | code = process_obj._bootstrap(parent_sentinel=child_r) |
| 78 | finally: |
| 79 | atexit._run_exitfuncs() |
| 80 | os._exit(code) |
| 81 | else: |
| 82 | os.close(child_w) |
| 83 | os.close(child_r) |
| 84 | self.finalizer = util.Finalize(self, util.close_fds, |
| 85 | (parent_r, parent_w,)) |
| 86 | self.sentinel = parent_r |
| 87 | |
| 88 | def close(self): |
| 89 | if self.finalizer is not None: |