(args: Sequence[str], **kwargs)
| 98 | |
| 99 | |
| 100 | def _posix_detached_subprocess(args: Sequence[str], **kwargs) -> int: |
| 101 | # double fork and execute a subprocess so that there are no zombies |
| 102 | read_end, write_end = os.pipe() |
| 103 | pid = _fork_process() |
| 104 | if pid > 0: # in parent |
| 105 | os.close(write_end) |
| 106 | pid_str = os.read(read_end, 32).decode("utf8") |
| 107 | os.close(read_end) |
| 108 | return int(pid_str) |
| 109 | |
| 110 | proc = subprocess.Popen(args, shell=False, close_fds=True, **kwargs) # noqa: S603 |
| 111 | os.close(read_end) |
| 112 | os.write(write_end, str(proc.pid).encode("utf8")) |
| 113 | os.close(write_end) |
| 114 | |
| 115 | exit_code = proc.wait() |
| 116 | os._exit(exit_code) |
| 117 | |
| 118 | |
| 119 | def _detached_subprocess(args: Sequence[str], **kwargs) -> int: |
no test coverage detected