python subprocess 杀掉全部派生的子进程方法

好的。首先需要了解一些基本概念:

  • 进程:操作系统中正在运行的程序实例。
  • 子进程:由父进程启动的新进程。

Python中,可以使用subprocess模块创建新的进程,例如:

import subprocess

process = subprocess.Popen(['ls', '-l'])

上述代码启动了一个ls -l命令,返回值为一个Popen对象,该对象可以被用于与子进程进行交互。

杀掉派生的全部子进程方法有几种,下面将分别介绍。

方法一:使用psutil模块

psutil是一个跨平台的进程和系统监控库。通过使用它的Process对象可以获取并操作进程相关信息。具体操作如下:

import psutil

def kill_child_processes(parent_pid, sig=signal.SIGTERM):
    """给定父进程id,杀掉该进程的所有子进程"""

    parent = psutil.Process(parent_pid)
    children = parent.children(recursive=True)
    for process in children:
        process.send_signal(sig)

kill_child_processes()函数接受一个PID,并杀死该进程的所有子进程。通过parent.children()获取所有子进程的列表,并使用process.send_signal(sig)发送信号(默认为SIGTERM)杀死每个子进程。注意:该方法也会杀死父进程。

下面是一个示例:

import subprocess
import time

processes = []

for _ in range(10):
    process = subprocess.Popen(['sleep', '10'])
    processes.append(process)

time.sleep(1)
kill_child_processes(processes[0].pid)

上述示例中,我们启动了10个睡眠进程,等待1秒后使用kill_child_processes()杀死第一个子进程,其他的进程也会被杀死。

方法二:使用os.killpg()

os.killpg()可向一组进程发送信号,同时也可以防止对进程组中正在运行的任何进程发送信号。如果我们通过os.setpgid()将进程放入单独的进程组,那么将能够轻松地杀死所有此进程组中的进程。

import os
import signal

def kill_pg(pid):
    """杀掉指定进程id所在进程组的所有进程"""

    os.killpg(os.getpgid(pid), signal.SIGTERM)

kill_pg()函数接受一个PID,并杀死该进程所在的进程组中的所有进程。注意:该方法会杀死包括父进程在内的整个进程组。

下面是一个示例:

import subprocess

processes = []

for _ in range(10):
    process = subprocess.Popen(['sleep', '10'])
    processes.append(process)

kill_pg(processes[0].pid)

上述示例中,我们通过os.setpgid()将第一个子进程及其所有子进程放入单独的进程组中,并使用kill_pg()杀死该进程组中的所有进程。

以上就是“python subprocess 杀掉全部派生的子进程方法”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python subprocess 杀掉全部派生的子进程方法 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • python list多级排序知识点总结

    以下是详细讲解“Python列表多级排序知识点总结”的完整攻略。 在Python中,列表是一种常用的数据类型,可以用来存储一组有序的数据。当需要对列表排序,可以使用sort()方法或sorted()函数。本文将介绍如何对列表进行多级排序,并提供两个示例说明。 单级排序 在Python中,可以使用sort()方法或sorted()函数对列表排序。默认情况下,s…

    python 2023年5月13日
    00
  • python包合集shutil示例代码详解

    让我来详细地讲解一下“Python包合集shutil示例代码详解”的完整攻略。 标题 首先要编写规范的标题,以便能够清晰地表达文章的主要内容。你可以这样写: Python包合集shutil示例代码详解 什么是shutil shutil是Python标准库中的一个包,用于实现高层次的文件操作。它提供了复制、移动、删除、压缩、解压缩等工具函数,可以方便地操作文件…

    python 2023年5月31日
    00
  • Django框架安装及项目创建过程解析

    Django框架安装及项目创建过程解析 Django是一个基于Python的Web框架,它提供了一系列工具和库,帮助开发者快速构建高质量的Web应用程序。本文将详细讲解Django框架的安装和项目创建过程,包括Django的安装、项目创建、应用程序创建和运行等内容,并提供两个示例。 Django的安装 在安装Django之前,我们需要先安装Python。Dj…

    python 2023年5月15日
    00
  • 【K哥爬虫普法】微信公众号爬虫构成不正当竞争,爬虫er面对金山,如何避免滥用爬虫?

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了“K哥爬虫普法”专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知晓如何合法合规利用爬虫技术,警钟长鸣,做一个守法、护法、有原则的技术人员。 案情介绍 2011年1月微信问世,腾讯公司经过持续投入,构建起包括微信平台、微信个人用户、开放平台、微…

    python 2023年4月22日
    00
  • 详解如何在PyQt5中实现平滑滚动的QScrollArea

    讲解如何在PyQt5中实现平滑滚动的QScrollArea的完整攻略包括以下几个步骤: 创建QScrollArea对象:使用PyQt5中的QScrollArea模块,创建一个QScrollArea对象。例如,可以在PyQt5的主窗口中添加一个QScrollArea控件。 import sys from PyQt5 import QtWidgets, QtGu…

    python 2023年6月3日
    00
  • 使用python BeautifulSoup库抓取58手机维修信息

    使用Python Beautiful Soup库抓取58手机维修信息 本文将介绍如何使用Python Beautiful Soup库抓取58手机维修信息。我们将提供两个示例,演示如何获取手机维修店铺信息和维修服务信息。 获取网页内容 以下是一个示例代码,演示如何使用Python获取58手机维修网站的网页内容: import requests url = ‘h…

    python 2023年5月15日
    00
  • Linux下远程连接Jupyter+pyspark部署教程

    下面是“Linux下远程连接Jupyter+pyspark部署教程”的完整攻略: 1. 安装Java环境 在Linux系统上进行Jupyter和pyspark的部署,需要先安装Java环境。可以使用以下命令进行安装: sudo apt-get update sudo apt-get install default-jdk 2. 安装Python环境和Jupy…

    python 2023年6月3日
    00
  • Python lxml解析HTML并用xpath获取元素的方法

    在Python中,可以使用lxml库解析HTML文档,并使用XPath语法获取元素。本文将详细讲解Python基于lxml解析HTML并用XPath获取元素的方法,包括两个示例。 示例一:获取指定标签的元素 以下是一个示例代码,演示如何使用lxml解析HTML文档,并使用XPath语法获取指定标签的元素: from lxml import etree htm…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部