python类wait_procs()的实例源码

bioqueue.py 文件源码 项目:BioQueue 作者: liyao001 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def kill_proc(proc):
    """
    Kill a process and its children processes
    :param proc: Process class defined in psutil
    :return: None
    """
    try:
        children = proc.children()
        for child in children:
            try:
                child.terminate()
            except:
                pass
        gone, still_alive = psutil.wait_procs(children, timeout=3)
        for p in still_alive:
            p.kill()
        proc.kill()
    except:
        pass
common.py 文件源码 项目:freeipa-pr-ci 作者: freeipa 项目源码 文件源码 阅读 39 收藏 0 点赞 0 评论 0
def _terminate(self):
        if self.process is None:
            return
        try:
            parent = psutil.Process(pid=self.process.pid)
            procs = parent.children(recursive=True)
            procs.append(parent)
            for proc in procs:
                proc.terminate()
            gone, still_alive = psutil.wait_procs(
                procs,
                timeout=constants.POPEN_TERM_TIMEOUT)
            for proc in still_alive:
                proc.kill()
        except OSError as exc:
            if exc.errno != errno.ESRCH:
                # ESRCH -> process doesn't exist (already ended)
                raise exc
        except psutil.NoSuchProcess:
            pass  # probably ended already
dynamic_analysis.py 文件源码 项目:dynamic-firmware-analysis 作者: secjey 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def signal_handler(sig, frame):
    """Handles signals sent by the user.
    In the case the SIGINT signal is received, child processes will be stopped.
    """
    if sig == signal.SIGINT:
        print(bcolors.OKBLUE + "\n[-] The program is stopping..." + bcolors.ENDC)
        procs = psutil.Process().children(recursive=True)
        try:
            for p in procs:
                p.terminate()
            gone, still_alive = psutil.wait_procs(psutil.Process().children(recursive=True), timeout=3)
            for p in still_alive:
                p.kill()
        except:
            pass
        sys.exit(0)
os_util.py 文件源码 项目:wptagent 作者: WPO-Foundation 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def wait_for_all(exe, timeout=30):
    """Wait for the given process to exit"""
    import psutil
    processes = []
    for proc in psutil.process_iter():
        try:
            pinfo = proc.as_dict(attrs=['pid', 'name', 'exe'])
        except psutil.NoSuchProcess:
            pass
        else:
            if 'exe' in pinfo and pinfo['exe'] is not None and\
                    os.path.basename(pinfo['exe']) == exe:
                processes.append(proc)
    if len(processes):
        logging.debug("Waiting up to %d seconds for %s to exit", timeout, exe)
        psutil.wait_procs(processes, timeout=timeout)
gui.py 文件源码 项目:server 作者: happypandax 项目源码 文件源码 阅读 20 收藏 0 点赞 0 评论 0
def kill_proc_tree(pid, sig=signal.SIGTERM, include_parent=True,
                   timeout=None, on_terminate=None):
    """Kill a process tree (including grandchildren) with signal
    "sig" and return a (gone, still_alive) tuple.
    "on_terminate", if specified, is a callabck function which is
    called as soon as a child terminates.
    """
    if pid == os.getpid():
        raise RuntimeError("I refuse to kill myself")
    parent = psutil.Process(pid)
    children = parent.children(recursive=True)
    if include_parent:
        children.append(parent)
    for p in children:
        p.send_signal(sig)
    gone, alive = psutil.wait_procs(children, timeout=timeout,
                                    callback=on_terminate)
    return (gone, alive)
static_analysis.py 文件源码 项目:static-firmware-analysis 作者: gitter-badger 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def signal_handler(sig, frame):
    """Handles signals sent by the user.
    In the case the SIGINT signal is received, child processes will be stopped.
    """
    if sig == signal.SIGINT:
        print(bcolors.OKBLUE + "\n[-] The program is stopping..." + bcolors.ENDC)
        procs = psutil.Process().children(recursive=True)
        try:
            for p in procs:
                p.terminate()
                gone, still_alive = psutil.wait_procs(psutil.Process().children(recursive=True), timeout=3)
            for p in still_alive:
                p.kill()
        except:
            pass
        sys.exit(0)
processes.py 文件源码 项目:ppapi 作者: PPAPI 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def kill_proc_tree(self, _pid, including_parent=True):
        parent = psutil.Process(_pid)
        children = []
        children = parent.children(recursive=True)
        for child in children:
            child.kill()
        psutil.wait_procs(children, timeout=5)
        if including_parent:
            if psutil.pid_exists(parent.pid):
                parent.kill()
                parent.wait(5)

    ## Callback function that is executed after a process is completed
    #  A status file is generated that contains the return code of the executed process
    #  @param _path path where the processes was started
    #  @param _return_code return code of completed process
launch_gui.py 文件源码 项目:spyking-circus 作者: spyking-circus 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def stop(self, force=False):
        if self.process is not None:

            if not force:
                msg = QMessageBox()
                msg.setIcon(QMessageBox.Warning)
                msg.setWindowTitle('Confirm process termination')
                msg.setText(
                    'This will terminate the running process. Are you sure '
                    'you want to do this?')
                msg.setInformativeText(
                    'Interrupting the process may leave partly '
                    'created files that cannot be used for '
                    'further analysis.')
                msg.addButton('Stop process', QMessageBox.YesRole)
                cancel_button = msg.addButton('Cancel', QMessageBox.NoRole)
                msg.setDefaultButton(cancel_button)
                msg.exec_()
                if msg.clickedButton() == cancel_button:
                    # Continue to run
                    return

            self._interrupted = True
            # Terminate child processes as well
            pid = int(self.process.pid())
            if sys.platform == 'win32' and pid != 0:
                # The returned value is not a PID but a pointer
                lp = ctypes.cast(pid, LPWinProcInfo)
                pid = lp.contents.dwProcessID

            if pid != 0:
                process = psutil.Process(pid)
                children = process.children(recursive=True)
                for proc in children:
                    proc.terminate()
                gone, alive = psutil.wait_procs(children, timeout=3)
                for proc in alive:
                    proc.kill()

                self.process.terminate()
                self.process = None
killtree.py 文件源码 项目:aquests 作者: hansroh 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def kill (pid, including_parent = True):    
        try: 
            parent = psutil.Process(pid)
        except psutil.NoSuchProcess:
            return

        children = parent.children(recursive=True)
        for child in children:
            child.kill()
        psutil.wait_procs(children, timeout=5)
        if including_parent:
            parent.kill()
            parent.wait(5)
eclair.py 文件源码 项目:lightning-integration 作者: cdecker 项目源码 文件源码 阅读 18 收藏 0 点赞 0 评论 0
def stop(self):
        # Java forks internally and detaches its children, use psutil to hunt
        # them down and kill them
        proc = psutil.Process(self.proc.pid)
        processes = [proc] + proc.children(recursive=True)

        # Be nice to begin with
        for p in processes:
            p.terminate()
        _, alive = psutil.wait_procs(processes, timeout=3)

        # But if they aren't, we can be more persuasive
        for p in alive:
            p.kill()
        psutil.wait_procs(alive, timeout=3)
test_system.py 文件源码 项目:respeaker_virtualenv 作者: respeaker 项目源码 文件源码 阅读 48 收藏 0 点赞 0 评论 0
def test_wait_procs_no_timeout(self):
        sproc1 = get_test_subprocess()
        sproc2 = get_test_subprocess()
        sproc3 = get_test_subprocess()
        procs = [psutil.Process(x.pid) for x in (sproc1, sproc2, sproc3)]
        for p in procs:
            p.terminate()
        gone, alive = psutil.wait_procs(procs)
tmux.py 文件源码 项目:spqrel_tools 作者: LCAS 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def _terminate(self, pid):
        procs = Process(pid).children()
        for p in procs:
            p.terminate()
        gone, still_alive = wait_procs(procs, timeout=1,
                                       callback=self._on_terminate)
        for p in still_alive:
            p.kill()
osutils.py 文件源码 项目:pycon2016 作者: nhudinhtuan 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def kill_process_tree(pid):
    try:
        main_proc = psutil.Process(pid)
    except (psutil.NoSuchProcess, psutil.AccessDenied) as ex:
        return
    processes = main_proc.children(recursive=True)
    processes.append(main_proc)
    for proc in processes:
        proc.terminate()
    psutil.wait_procs(processes)
parallel_loop.py 文件源码 项目:picire 作者: renatahodovan 项目源码 文件源码 阅读 27 收藏 0 点赞 0 评论 0
def _abort(self):
        """Terminate all live jobs."""
        for i, pid in enumerate(self._slots):
            if pid != 0:
                if not is_windows:
                    try:
                        os.killpg(pid, signal.SIGTERM)
                    except OSError:
                        # If the process with pid did not have time to become a process group leader,
                        # then pgid does not exist and os.killpg could not kill the process,
                        # so re-try kill the process only.
                        try:
                            os.kill(pid, signal.SIGTERM)
                        except OSError:
                            pass
                else:
                    root_proc = psutil.Process(pid)
                    children = root_proc.children(recursive=True) + [root_proc]
                    for proc in children:
                        try:
                            # Would be easier to use proc.terminate() here but psutils
                            # (up to version 5.4.0) on Windows terminates processes with
                            # the 0 signal/code, making the outcome of the terminated
                            # process indistinguishable from a successful execution.
                            os.kill(proc.pid, signal.SIGTERM)
                        except OSError:
                            pass
                    psutil.wait_procs(children, timeout=1)
            self._slots[i] = 0
replaying.py 文件源码 项目:pyrcrack 作者: XayOn 项目源码 文件源码 阅读 27 收藏 0 点赞 0 评论 0
def watch_process(self):
        """
            Watcher thread.
            This one relaunches airodump eatch time it dies until
            we call stop()
        """
        psutil.wait_procs([psutil.Process(self._proc.pid)],
                          callback=self.start)
scanning.py 文件源码 项目:pyrcrack 作者: XayOn 项目源码 文件源码 阅读 19 收藏 0 点赞 0 评论 0
def watch_process(self):
        """
            Watcher thread.
            This one relaunches airodump eatch time it dies until
            we call stop()
        """
        try:
            psutil.wait_procs([psutil.Process(self._proc.pid)],
                          callback=self.start)
        except psutil. NoSuchProcess:
            pass
test_system.py 文件源码 项目:zenchmarks 作者: squeaky-pl 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def test_wait_procs_no_timeout(self):
        sproc1 = get_test_subprocess()
        sproc2 = get_test_subprocess()
        sproc3 = get_test_subprocess()
        procs = [psutil.Process(x.pid) for x in (sproc1, sproc2, sproc3)]
        for p in procs:
            p.terminate()
        gone, alive = psutil.wait_procs(procs)
test_system.py 文件源码 项目:FancyWord 作者: EastonLee 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def test_wait_procs_no_timeout(self):
        sproc1 = get_test_subprocess()
        sproc2 = get_test_subprocess()
        sproc3 = get_test_subprocess()
        procs = [psutil.Process(x.pid) for x in (sproc1, sproc2, sproc3)]
        for p in procs:
            p.terminate()
        gone, alive = psutil.wait_procs(procs)
job_client.py 文件源码 项目:ava-capture 作者: electronicarts 项目源码 文件源码 阅读 20 收藏 0 点赞 0 评论 0
def kill_process_tree(pid, including_parent=True):
    parent = psutil.Process(pid)
    children = parent.children(recursive=True)
    for child in children:
        child.kill()
    gone, still_alive = psutil.wait_procs(children, timeout=5)
    if including_parent:
        parent.kill()
        parent.wait(5)
full.py 文件源码 项目:GUI-for-EWBF 作者: K4P11 项目源码 文件源码 阅读 26 收藏 0 点赞 0 评论 0
def kill_proc_tree(pid, including_parent=False):    
    parent = psutil.Process(pid)
    children = parent.children(recursive=True)
    for child in children:
        child.kill()
    gone, still_alive = psutil.wait_procs(children, timeout=5)
main.py 文件源码 项目:More-I-O 作者: koltafrickenfer 项目源码 文件源码 阅读 22 收藏 0 点赞 0 评论 0
def kill_proc_tree(pid, including_parent=True):    
    parent = psutil.Process(pid)
    children = parent.children(recursive=True)
    for child in children:
        child.kill()
    gone, still_alive = psutil.wait_procs(children, timeout=5)
    if including_parent:
        parent.kill()
        parent.wait(5)
mario.py 文件源码 项目:More-I-O 作者: koltafrickenfer 项目源码 文件源码 阅读 21 收藏 0 点赞 0 评论 0
def kill_proc_tree(pid, including_parent=True): 
    parent = psutil.Process(pid)
    children = parent.children(recursive=True)
    for child in children:
        child.kill()
    gone, still_alive = psutil.wait_procs(children, timeout=5)
    if including_parent:
        parent.kill()
        parent.wait(5)
helpers.py 文件源码 项目:incubator-airflow-old 作者: apache 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def kill_process_tree(logger, pid, timeout=DEFAULT_TIME_TO_WAIT_AFTER_SIGTERM):
    """
    TODO(saguziel): also kill the root process after killing descendants

    Kills the process's descendants. Kills using the `kill`
    shell command so that it can change users. Note: killing via PIDs
    has the potential to the wrong process if the process dies and the
    PID gets recycled in a narrow time window.

    :param logger: logger
    :type logger: logging.Logger
    """
    try:
        root_process = psutil.Process(pid)
    except psutil.NoSuchProcess:
        logger.warning("PID: {} does not exist".format(pid))
        return

    # Check child processes to reduce cases where a child process died but
    # the PID got reused.
    descendant_processes = [x for x in root_process.children(recursive=True)
                            if x.is_running()]

    if len(descendant_processes) != 0:
        logger.info("Terminating descendant processes of {} PID: {}"
                    .format(root_process.cmdline(),
                            root_process.pid))
        temp_processes = descendant_processes[:]
        for descendant in temp_processes:
            logger.info("Terminating descendant process {} PID: {}"
                        .format(descendant.cmdline(), descendant.pid))
            if not kill_using_shell(logger, descendant.pid, signal.SIGTERM):
                descendant_processes.remove(descendant)

        logger.info("Waiting up to {}s for processes to exit..."
                    .format(timeout))
        try:
            psutil.wait_procs(descendant_processes, timeout)
            logger.info("Done waiting")
        except psutil.TimeoutExpired:
            logger.warning("Ran out of time while waiting for "
                           "processes to exit")
        # Then SIGKILL
        descendant_processes = [x for x in root_process.children(recursive=True)
                                if x.is_running()]

        if len(descendant_processes) > 0:
            temp_processes = descendant_processes[:]
            for descendant in temp_processes:
                logger.info("Killing descendant process {} PID: {}"
                            .format(descendant.cmdline(), descendant.pid))
                if not kill_using_shell(logger, descendant.pid, signal.SIGKILL):
                    descendant_processes.remove(descendant)
                else:
                    descendant.wait()
            logger.info("Killed all descendant processes of {} PID: {}"
                        .format(root_process.cmdline(),
                                root_process.pid))
    else:
        logger.debug("There are no descendant processes to kill")
test_system.py 文件源码 项目:respeaker_virtualenv 作者: respeaker 项目源码 文件源码 阅读 24 收藏 0 点赞 0 评论 0
def test_wait_procs(self):
        def callback(p):
            l.append(p.pid)

        l = []
        sproc1 = get_test_subprocess()
        sproc2 = get_test_subprocess()
        sproc3 = get_test_subprocess()
        procs = [psutil.Process(x.pid) for x in (sproc1, sproc2, sproc3)]
        self.assertRaises(ValueError, psutil.wait_procs, procs, timeout=-1)
        self.assertRaises(TypeError, psutil.wait_procs, procs, callback=1)
        t = time.time()
        gone, alive = psutil.wait_procs(procs, timeout=0.01, callback=callback)

        self.assertLess(time.time() - t, 0.5)
        self.assertEqual(gone, [])
        self.assertEqual(len(alive), 3)
        self.assertEqual(l, [])
        for p in alive:
            self.assertFalse(hasattr(p, 'returncode'))

        @retry_before_failing(30)
        def test(procs, callback):
            gone, alive = psutil.wait_procs(procs, timeout=0.03,
                                            callback=callback)
            self.assertEqual(len(gone), 1)
            self.assertEqual(len(alive), 2)
            return gone, alive

        sproc3.terminate()
        gone, alive = test(procs, callback)
        self.assertIn(sproc3.pid, [x.pid for x in gone])
        if POSIX:
            self.assertEqual(gone.pop().returncode, signal.SIGTERM)
        else:
            self.assertEqual(gone.pop().returncode, 1)
        self.assertEqual(l, [sproc3.pid])
        for p in alive:
            self.assertFalse(hasattr(p, 'returncode'))

        @retry_before_failing(30)
        def test(procs, callback):
            gone, alive = psutil.wait_procs(procs, timeout=0.03,
                                            callback=callback)
            self.assertEqual(len(gone), 3)
            self.assertEqual(len(alive), 0)
            return gone, alive

        sproc1.terminate()
        sproc2.terminate()
        gone, alive = test(procs, callback)
        self.assertEqual(set(l), set([sproc1.pid, sproc2.pid, sproc3.pid]))
        for p in gone:
            self.assertTrue(hasattr(p, 'returncode'))
test_system.py 文件源码 项目:zenchmarks 作者: squeaky-pl 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def test_wait_procs(self):
        def callback(p):
            l.append(p.pid)

        l = []
        sproc1 = get_test_subprocess()
        sproc2 = get_test_subprocess()
        sproc3 = get_test_subprocess()
        procs = [psutil.Process(x.pid) for x in (sproc1, sproc2, sproc3)]
        self.assertRaises(ValueError, psutil.wait_procs, procs, timeout=-1)
        self.assertRaises(TypeError, psutil.wait_procs, procs, callback=1)
        t = time.time()
        gone, alive = psutil.wait_procs(procs, timeout=0.01, callback=callback)

        self.assertLess(time.time() - t, 0.5)
        self.assertEqual(gone, [])
        self.assertEqual(len(alive), 3)
        self.assertEqual(l, [])
        for p in alive:
            self.assertFalse(hasattr(p, 'returncode'))

        @retry_before_failing(30)
        def test(procs, callback):
            gone, alive = psutil.wait_procs(procs, timeout=0.03,
                                            callback=callback)
            self.assertEqual(len(gone), 1)
            self.assertEqual(len(alive), 2)
            return gone, alive

        sproc3.terminate()
        gone, alive = test(procs, callback)
        self.assertIn(sproc3.pid, [x.pid for x in gone])
        if POSIX:
            self.assertEqual(gone.pop().returncode, -signal.SIGTERM)
        else:
            self.assertEqual(gone.pop().returncode, 1)
        self.assertEqual(l, [sproc3.pid])
        for p in alive:
            self.assertFalse(hasattr(p, 'returncode'))

        @retry_before_failing(30)
        def test(procs, callback):
            gone, alive = psutil.wait_procs(procs, timeout=0.03,
                                            callback=callback)
            self.assertEqual(len(gone), 3)
            self.assertEqual(len(alive), 0)
            return gone, alive

        sproc1.terminate()
        sproc2.terminate()
        gone, alive = test(procs, callback)
        self.assertEqual(set(l), set([sproc1.pid, sproc2.pid, sproc3.pid]))
        for p in gone:
            self.assertTrue(hasattr(p, 'returncode'))
test_system.py 文件源码 项目:FancyWord 作者: EastonLee 项目源码 文件源码 阅读 25 收藏 0 点赞 0 评论 0
def test_wait_procs(self):
        def callback(p):
            pids.append(p.pid)

        pids = []
        sproc1 = get_test_subprocess()
        sproc2 = get_test_subprocess()
        sproc3 = get_test_subprocess()
        procs = [psutil.Process(x.pid) for x in (sproc1, sproc2, sproc3)]
        self.assertRaises(ValueError, psutil.wait_procs, procs, timeout=-1)
        self.assertRaises(TypeError, psutil.wait_procs, procs, callback=1)
        t = time.time()
        gone, alive = psutil.wait_procs(procs, timeout=0.01, callback=callback)

        self.assertLess(time.time() - t, 0.5)
        self.assertEqual(gone, [])
        self.assertEqual(len(alive), 3)
        self.assertEqual(pids, [])
        for p in alive:
            self.assertFalse(hasattr(p, 'returncode'))

        @retry_before_failing(30)
        def test(procs, callback):
            gone, alive = psutil.wait_procs(procs, timeout=0.03,
                                            callback=callback)
            self.assertEqual(len(gone), 1)
            self.assertEqual(len(alive), 2)
            return gone, alive

        sproc3.terminate()
        gone, alive = test(procs, callback)
        self.assertIn(sproc3.pid, [x.pid for x in gone])
        if POSIX:
            self.assertEqual(gone.pop().returncode, -signal.SIGTERM)
        else:
            self.assertEqual(gone.pop().returncode, 1)
        self.assertEqual(pids, [sproc3.pid])
        for p in alive:
            self.assertFalse(hasattr(p, 'returncode'))

        @retry_before_failing(30)
        def test(procs, callback):
            gone, alive = psutil.wait_procs(procs, timeout=0.03,
                                            callback=callback)
            self.assertEqual(len(gone), 3)
            self.assertEqual(len(alive), 0)
            return gone, alive

        sproc1.terminate()
        sproc2.terminate()
        gone, alive = test(procs, callback)
        self.assertEqual(set(pids), set([sproc1.pid, sproc2.pid, sproc3.pid]))
        for p in gone:
            self.assertTrue(hasattr(p, 'returncode'))


问题


面经


文章

微信
公众号

扫码关注公众号