MCPcopy Create free account
hub / github.com/Dispatcharr/Dispatcharr / _Proc

Class _Proc

apps/proxy/live_proxy/utils.py:163–219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

161 stderr_r_ok = True
162
163 class _Proc:
164 stdin = stdin_file
165 stdout = stdout_file
166 stderr = stderr_file
167
168 def __init__(self):
169 self.pid = child_pid
170 self.returncode = None
171
172 def _reap(self, status):
173 if os.WIFEXITED(status):
174 self.returncode = os.WEXITSTATUS(status)
175 elif os.WIFSIGNALED(status):
176 self.returncode = -os.WTERMSIG(status)
177 else:
178 self.returncode = -1
179
180 def poll(self):
181 if self.returncode is not None:
182 return self.returncode
183 try:
184 rpid, status = os.waitpid(self.pid, os.WNOHANG)
185 if rpid:
186 self._reap(status)
187 except ChildProcessError:
188 self.returncode = -1
189 return self.returncode
190
191 def wait(self, timeout=None):
192 if self.returncode is not None:
193 return self.returncode
194 import gevent as _gevent
195 deadline = time.monotonic() + timeout if timeout is not None else None
196 while True:
197 try:
198 rpid, status = os.waitpid(self.pid, os.WNOHANG)
199 except ChildProcessError:
200 self.returncode = -1
201 return self.returncode
202 if rpid:
203 self._reap(status)
204 return self.returncode
205 if deadline is not None and time.monotonic() >= deadline:
206 raise subprocess.TimeoutExpired(self.pid, timeout)
207 _gevent.sleep(0.01)
208
209 def kill(self):
210 try:
211 os.kill(self.pid, signal.SIGKILL)
212 except ProcessLookupError:
213 pass
214
215 def terminate(self):
216 try:
217 os.kill(self.pid, signal.SIGTERM)
218 except ProcessLookupError:
219 pass
220

Callers 1

posix_spawn_procFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected