本文整理汇总了Python中os.waitpid方法的典型用法代码示例。如果您正苦于以下问题:Python os.waitpid方法的具体用法?Python os.waitpid怎么用?Python os.waitpid使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类os
的用法示例。
在下文中一共展示了os.waitpid方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _internal_poll
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
_WNOHANG=os.WNOHANG, _os_error=os.error, _ECHILD=errno.ECHILD):
"""Check if child process has terminated. Returns returncode
attribute.
This method is called by __del__, so it cannot reference anything
outside of the local scope (nor can any methods it calls).
"""
if self.returncode is None:
try:
pid, sts = _waitpid(self.pid, _WNOHANG)
if pid == self.pid:
self._handle_exitstatus(sts)
except _os_error as e:
if _deadstate is not None:
self.returncode = _deadstate
elif e.errno == _ECHILD:
# This happens if SIGCLD is set to be ignored or
# waiting for child processes has otherwise been
# disabled for our process. This child is dead, we
# can't get the status.
# http://bugs.python.org/issue15756
self.returncode = 0
return self.returncode
示例2: reap_children
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def reap_children():
"""Use this function at the end of test_main() whenever sub-processes
are started. This will help ensure that no extra children (zombies)
stick around to hog resources and create problems when looking
for refleaks.
"""
# Reap all our dead child processes so we don't leave zombies around.
# These hog resources and might be causing some of the buildbots to die.
if hasattr(os, 'waitpid'):
any_process = -1
while True:
try:
# This will raise an exception on Windows. That's ok.
pid, status = os.waitpid(any_process, os.WNOHANG)
if pid == 0:
break
except:
break
示例3: _zombie_reaper
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def _zombie_reaper(self):
while True:
try:
res = os.waitpid(-1, os.WNOHANG)
# don't sleep or stop if a zombie process was found
# as there could be more
if res != (0, 0):
continue
except ChildProcessError:
# There are no child processes yet (or they have been killed)
pass
except os.error:
LOG.exception("Got OS error while reaping zombie processes")
if self._terminate_called.isSet():
break
time.sleep(1)
示例4: waitfinish
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def waitfinish(self, waiter=os.waitpid):
pid, systemstatus = waiter(self.pid, 0)
if systemstatus:
if os.WIFSIGNALED(systemstatus):
exitstatus = os.WTERMSIG(systemstatus) + 128
else:
exitstatus = os.WEXITSTATUS(systemstatus)
else:
exitstatus = 0
signal = systemstatus & 0x7f
if not exitstatus and not signal:
retval = self.RETVAL.open('rb')
try:
retval_data = retval.read()
finally:
retval.close()
retval = marshal.loads(retval_data)
else:
retval = None
stdout = self.STDOUT.read()
stderr = self.STDERR.read()
self._removetemp()
return Result(exitstatus, signal, retval, stdout, stderr)
示例5: maybe_start_cleaner_thread
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def maybe_start_cleaner_thread(self):
if not self.over_limit():
return
# exit immediately if another cleaner is active
cleaner_lock = os.path.join(self.pcache_dir, ".clean")
if self.lock_file(cleaner_lock, blocking=False):
self.log(INFO, "cleanup not starting: %s locked", cleaner_lock)
return
# see http://www.faqs.org/faqs/unix-faq/faq/part3/section-13.html
# for explanation of double-fork
pid = os.fork()
if pid: # parent
os.waitpid(pid, 0)
return
else: # child
self.daemonize()
pid = os.fork()
if pid:
os._exit(0)
# grandchild
self.clean_cache()
self.unlock_file(cleaner_lock)
os._exit(0)
示例6: _nanny_thread
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def _nanny_thread(child_proc, pipe, return_val):
if isinstance(child_proc, int):
pid, r = os.waitpid(child_proc, 0)
elif isinstance(child_proc, list):
while True:
pid, r = os.wait()
if pid in child_proc:
break
else:
r = child_proc.wait()
pid = child_proc.pid
logging.debug("Nanny thread detected termination "
"of pid %s", pid)
return_val['val'] = r
return_val['pid'] = pid
os.write(pipe, 'x')
示例7: wait_for_child_and_forward_signals
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def wait_for_child_and_forward_signals(child_pid, process_name):
"""Wait for a child to terminate and in the meantime forward all signals
that the current process receives to this child.
@return a tuple of exit code and resource usage of the child as given by os.waitpid
"""
block_all_signals()
while True:
logging.debug("Waiting for signals")
signum = signal.sigwait(_ALL_SIGNALS)
if signum == signal.SIGCHLD:
pid, exitcode, ru_child = os.wait4(-1, os.WNOHANG)
while pid != 0:
if pid == child_pid:
return exitcode, ru_child
else:
logging.debug("Received unexpected SIGCHLD for PID %s", pid)
pid, exitcode, ru_child = os.wait4(-1, os.WNOHANG)
else:
_forward_signal(signum, child_pid, process_name)
示例8: prompt
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def prompt(default=None):
editor = 'nano'
with tempfile.NamedTemporaryFile(mode='r+') as tmpfile:
if default:
tmpfile.write(default)
tmpfile.flush()
child_pid = os.fork()
is_child = child_pid == 0
if is_child:
os.execvp(editor, [editor, tmpfile.name])
else:
os.waitpid(child_pid, 0)
tmpfile.seek(0)
return tmpfile.read().strip()
示例9: _internal_poll
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
_WNOHANG=os.WNOHANG, _os_error=os.error):
"""Check if child process has terminated. Returns returncode
attribute.
This method is called by __del__, so it cannot reference anything
outside of the local scope (nor can any methods it calls).
"""
if self.returncode is None:
try:
pid, sts = _waitpid(self.pid, _WNOHANG)
if pid == self.pid:
self._handle_exitstatus(sts)
except _os_error:
if _deadstate is not None:
self.returncode = _deadstate
return self.returncode
示例10: _internal_poll
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
_WNOHANG=os.WNOHANG, _os_error=os.error, _ECHILD=errno.ECHILD):
"""Check if child process has terminated. Returns returncode
attribute.
This method is called by __del__, so it cannot reference anything
outside of the local scope (nor can any methods it calls).
"""
if self.returncode is None:
try:
pid, sts = _waitpid(self.pid, _WNOHANG)
if pid == self.pid:
self._handle_exitstatus(sts)
except _os_error as e:
if _deadstate is not None:
self.returncode = _deadstate
if e.errno == _ECHILD:
# This happens if SIGCLD is set to be ignored or
# waiting for child processes has otherwise been
# disabled for our process. This child is dead, we
# can't get the status.
# http://bugs.python.org/issue15756
self.returncode = 0
return self.returncode
示例11: wait
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def wait(self):
"""Wait for child process to terminate. Returns returncode
attribute."""
while self.returncode is None:
try:
pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0)
except OSError as e:
if e.errno != errno.ECHILD:
raise
# This happens if SIGCLD is set to be ignored or waiting
# for child processes has otherwise been disabled for our
# process. This child is dead, we can't get the status.
pid = self.pid
sts = 0
# Check the pid and loop as waitpid has been known to return
# 0 even without WNOHANG in odd situations. issue14396.
if pid == self.pid:
self._handle_exitstatus(sts)
return self.returncode
示例12: test_is_alive_after_fork
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def test_is_alive_after_fork(self):
# Try hard to trigger #18418: is_alive() could sometimes be True on
# threads that vanished after a fork.
old_interval = sys.getcheckinterval()
# Make the bug more likely to manifest.
sys.setcheckinterval(10)
try:
for i in range(20):
t = threading.Thread(target=lambda: None)
t.start()
pid = os.fork()
if pid == 0:
os._exit(1 if t.is_alive() else 0)
else:
t.join()
pid, status = os.waitpid(pid, 0)
self.assertEqual(0, status)
finally:
sys.setcheckinterval(old_interval)
示例13: test_3_join_in_forked_from_thread
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def test_3_join_in_forked_from_thread(self):
# Like the test above, but fork() was called from a worker thread
# In the forked process, the main Thread object must be marked as stopped.
script = """if 1:
main_thread = threading.current_thread()
def worker():
childpid = os.fork()
if childpid != 0:
os.waitpid(childpid, 0)
sys.exit(0)
t = threading.Thread(target=joiningfunc,
args=(main_thread,))
print 'end of main'
t.start()
t.join() # Should not block: main_thread is already stopped
w = threading.Thread(target=worker)
w.start()
"""
self._run_and_join(script)
示例14: test_reinit_tls_after_fork
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def test_reinit_tls_after_fork(self):
# Issue #13817: fork() would deadlock in a multithreaded program with
# the ad-hoc TLS implementation.
def do_fork_and_wait():
# just fork a child process and wait it
pid = os.fork()
if pid > 0:
os.waitpid(pid, 0)
else:
os._exit(0)
# start a bunch of threads that will fork() child processes
threads = []
for i in range(16):
t = threading.Thread(target=do_fork_and_wait)
threads.append(t)
t.start()
for t in threads:
t.join()
示例15: test_stopped
# 需要导入模块: import os [as 别名]
# 或者: from os import waitpid [as 别名]
def test_stopped(self):
"""Test wait() behavior when waitpid returns WIFSTOPPED; issue29335."""
args = [sys.executable, '-c', 'pass']
proc = subprocess.Popen(args)
# Wait until the real process completes to avoid zombie process
pid = proc.pid
pid, status = os.waitpid(pid, 0)
self.assertEqual(status, 0)
status = _testcapi.W_STOPCODE(3)
def mock_waitpid(pid, flags):
return (pid, status)
with test_support.swap_attr(os, 'waitpid', mock_waitpid):
returncode = proc.wait()
self.assertEqual(returncode, -3)