返回顶部
首页 > 资讯 > 后端开发 > Python >subprocess.popen.kill杀死所有子进程
  • 240
分享到

subprocess.popen.kill杀死所有子进程

进程subprocesspopen 2023-01-31 08:01:13 240人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

使用subprocess模块可创建子进程。subprocess. Popen ( args , bufsize=0 , executable=None ,&nb

使用subprocess模块可创建子进程。

subprocess. Popen ( args , bufsize=0 , executable=None , stdin=None , stdout=None , stderr=None , preexec_fn=None , close_fds=False , shell=False , cwd=None , env=None , universal_newlines=False , startupinfo=None , creationflags=0 )

subprocess.Popen(['Google-chrome',"Http://www.baidu.com"])可打开chrome并显示百度网页。

subprocess.Popen.pid可显示子进程的id,但这只是打开的shell的id,如果此时使用pid.kill是无法杀掉所有子进程的。

 

杀掉所有子进程,代码:

import sys, os, subprocess, time, signal
p = subprocess.Popen(['google-chrome',"http://www.baidu.com"], close_fds=True, preexec_fn = os.setsid)
print p.pid  
time.sleep(5)
# p.kill() #无法杀掉所有子进程,只能杀掉子shell的进程

# p.terminate()  #无法杀掉所有子进程
os.killpg( p.pid,signal.SIGUSR1)

time.sleep(3)

 

注意:

close_fds=True,此时除了文件描述符为0 , 1 and 2,其他子进程都要被杀掉。( linux中所有的进程都是进程0的子进程。

pid=1的是init,内核完成之后启动的第一个进程,然后init根据/etc/inittab的内容再去启动其它进程。)

os.setsid(): 使独立于终端的进程(不响应sigint,sighup等),使脱离终端。

SIGUSR1: 用户自定义信号

os.killpg( p.pid,signal.SIGUSR1): 发送SIGUSR1信号到组进程p.pid

最近使用python 调用ansible命令,来监测系统相关服务。发现到达指定时间,ansible进程没有杀掉。导致服务器卡死。

后来尝试 使用os.killpg ,发现可以杀掉ansible 子进程。

 

完整代码如下:

#!/usr/bin/env python3coding: utf-8

import os
import time
import signal
import subprocess

def execute_linux2(cmd, timeout=10, skip=False):
    """
    执行linux命令,返回list
    :param cmd: linux命令
    :param timeout: 超时时间,生产环境, 特别卡, 因此要3秒
    :param skip: 是否跳过超时限制
    :return: list
    """
    p = subprocess.Popen(cmd, stderr=subprocess.STDOUT, stdout=subprocess.PIPE,shell=True,close_fds=True,preexec_fn=os.setsid)

    t_beginning = time.time()  # 开始时间
    while True:
        if p.poll() is not None:
            break
        seconds_passed = time.time() - t_beginning
        if not skip:
            if seconds_passed > timeout:
                # p.terminate()
                # p.kill()
                # raise TimeoutError(cmd, timeout)
                print('错误, 命令: {},本地执行超时!'.fORMat(cmd))
                # 当shell=True时,只有os.killpg才能kill子进程
                try:
                    # time.sleep(1)
                    os.killpg(p.pid, signal.SIGUSR1)
                except Exception as e:
                    pass
                return False

    result = p.stdout.readlines()  # 结果输出列表
    return result

 

本文参考链接:

https://blog.csdn.net/heihuifeng/article/details/6543414


--结束END--

本文标题: subprocess.popen.kill杀死所有子进程

本文链接: https://lsjlt.com/news/193556.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • subprocess.popen.kill杀死所有子进程
    使用subprocess模块可创建子进程。subprocess. Popen ( args , bufsize=0 , executable=None ,&nb...
    99+
    2023-01-31
    进程 subprocess popen
  • linux怎么杀死所有nginx进程
    可以使用以下命令来杀死所有的nginx进程:1. 使用ps命令查找nginx进程的PID(进程ID):```ps aux | gre...
    99+
    2023-09-27
    linux nginx
  • linux怎么杀死所有java进程
    要杀死所有Java进程,可以使用以下命令:1. 使用ps命令列出所有Java进程的PID(进程ID):```ps -ef | gre...
    99+
    2023-10-11
    linux java
  • 如何杀死redis进程
    在redis中杀死进程的方法:1.命令行启动redis;2.redis服务端;3.执行“ps -ef|grep redis”命令查看进程;4.使用kill命令杀死进程;在redis中杀死进程的方法首先,在计算机命令行中启动redis;red...
    99+
    2024-04-02
  • windows杀死进程命令
            有时候由于病毒或其他原因,启动了一系列的进程,并且有时杀了这个,又多了那个。这时候我们可以特定选择一种杀,很多人对windows杀死进程命令比较感兴趣,所以今天小编就为大家来详细讲一讲windows命令行关闭进程教程,感兴趣...
    99+
    2023-09-01
    windows 服务器 linux
  • linux怎么杀死进程kill
    在Linux中,可以使用kill命令来杀死进程。kill命令的基本语法如下:```kill [选项] 进程ID```常用的选项包括:...
    99+
    2023-09-11
    linux
  • linux杀死进程kill的方法有哪些
    在Linux系统中,有多种方法可以杀死进程。以下是一些常用的方法:1. 使用kill命令:kill命令可以向进程发送信号,通过向进程...
    99+
    2023-08-26
    linux
  • linux怎么查看进程和杀死进程
    要查看进程,可以使用以下命令:1. `ps`命令:显示当前用户的进程列表。```ps```2. `top`命令:实时显示进程的资源使...
    99+
    2023-09-28
    linux
  • Linux如何查看进程并杀死进程?
    一、Linux查看进程命令 PS命令:     ps命令是一个相当强大地Linux进程查看命令,运用该命令可以确定有哪些进程正在运行和运行地状态、 进程是否结束、进程有没有僵死、哪些进程占用了过多地资源等。总之大部分信息均为可以通过执行该命...
    99+
    2023-08-31
    linux 运维 服务器
  • 如何批量杀死MySQL进程
    这期内容当中小编将会给大家带来有关如何批量杀死MySQL进程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 杀掉当前所有的MySQL连接方法...
    99+
    2024-04-02
  • Linux中怎么杀死defunct进程
    Linux中怎么杀死defunct进程,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、什么是defunct进程(僵尸进程)在 Linux 系统中,一个进程结束了,但是他的父进...
    99+
    2023-06-12
  • linux下杀死进程的方法
    本篇内容介绍了“linux下杀死进程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. kill作用:根据进程号杀死进程用法: kil...
    99+
    2023-06-17
  • linux怎么杀死多个进程
    要杀死多个进程,可以使用以下命令:1. 使用`ps`命令来查找要杀死的进程的PID(进程ID),如:```ps -ef | grep...
    99+
    2023-09-08
    linux
  • linux如何查看进程号并杀死进程
    这篇文章给大家分享的是有关linux如何查看进程号并杀死进程的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、...
    99+
    2023-06-15
  • Linux下怎么杀死僵尸进程
    这篇文章将为大家详细讲解有关Linux下怎么杀死僵尸进程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux 中的进程是什么?这一切始于执行 Linux 中的一个程序时,当它被执行时,它的运行实例被称...
    99+
    2023-06-27
  • linux杀死进程的五种方法(kill)
    添加链接描述 相关博主的链接; 方法一:通过kill 进程id的方式可以实现 首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id: 然后通过 kill...
    99+
    2023-08-19
    linux firefox 服务器
  • 云服务器防止进程被杀死
    云服务器采用了分布式系统设计,每个用户都有自己的独立服务器,可以在同一时间访问和处理数据。但是,由于云服务器是一个虚拟的服务,用户的身份是不可见的,因此攻击者可以通过攻击云服务器的漏洞,利用这些漏洞进入用户的计算机系统,获取用户的个人信息和...
    99+
    2023-10-27
    被杀 进程 服务器
  • mysql杀死进程的方法是什么
    在MySQL中,可以使用以下步骤来杀死一个进程: 首先,使用以下命令查看当前正在运行的进程: SHOW PROCESSLIST;...
    99+
    2024-05-13
    mysql
  • Linux系统kill命令怎么杀死进程
    这篇文章的内容主要围绕Linux系统kill命令怎么杀死进程进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!当我们打开一个程序然后突然程序会锁死、停止...
    99+
    2023-06-28
  • linux僵尸进程杀不死怎么解决
    今天小编给大家分享一下linux僵尸进程杀不死怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。linux僵尸进程杀不死...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作