#!/usr/bin/env python import threading import time import os import subprocess def run_command(cmd, timeout=None, need_log=True, need_sudo=False, need_output=False, preexec_fn=None, retry_times=1, interval=1): arg_stdout = arg_stderr = None proc = subprocess.Popen( args=cmd, preexec_fn=preexec_fn, close_fds=True, stdout=arg_stdout, stderr=arg_stderr, shell=True) stdout, stderr = proc.communicate() result = proc.returncode stdout = stdout.rstrip() if stdout else "" stderr = stderr.rstrip() if stderr else "" if result == 0: output = stdout else: output = "".join([stdout, stderr]) def run_cmd(): try: cmd = "echo \"do some cgroup stuff for child process first\" " shell = isinstance(cmd, str) os.getpid() ret = subprocess.Popen( cmd, shell=shell, close_fds=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = ret.communicate() stdout = stdout.rstrip() if stdout else "" stderr = stderr.rstrip() if stderr else "" if ret.returncode != 0: return ret.returncode, "".join([stdout, stderr]) return ret.returncode, stdout except Exception as e: print(e) raise e def _readerthread3(): i = 0 while 1: preexec_fn_no_args = run_cmd status = run_command("/bin/ls",preexec_fn=preexec_fn_no_args) print(status) time.sleep(0.01) i += 1 if i % 500000: print('thread3') stdout_thread3 = threading.Thread(target=_readerthread3) stdout_thread3.setDaemon(True) stdout_thread3.start() stdout_thread4 = threading.Thread(target=_readerthread3) stdout_thread4.setDaemon(True) stdout_thread4.start() time.sleep(10000)