首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何结束一个不返回的python子进程?

在Python中,可以使用subprocess模块来创建和管理子进程。当一个子进程不返回时,可以通过以下步骤来结束它:

  1. 导入subprocess模块:import subprocess
  2. 创建子进程:process = subprocess.Popen(args, shell=True)
    • args是一个字符串,表示要执行的命令。例如,args = "python script.py"表示执行名为script.py的Python脚本。
    • shell=True表示在shell中执行命令。
  • 等待子进程结束:process.wait()
    • wait()方法会阻塞当前进程,直到子进程结束。
  • 结束子进程:process.terminate()
    • terminate()方法会发送一个终止信号给子进程,使其结束运行。

完整的代码示例:

代码语言:txt
复制
import subprocess

# 创建子进程
process = subprocess.Popen("python script.py", shell=True)

# 等待子进程结束
process.wait()

# 结束子进程
process.terminate()

在上述代码中,script.py是要执行的Python脚本。当子进程执行完毕后,wait()方法会返回,然后使用terminate()方法结束子进程。

请注意,以上代码只是一个示例,实际使用时需要根据具体情况进行调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在Bash中等待多个子进程完成,并且当其中任何一个子进程以非零退出状态结束时,使主进程也返回一个非零的退出码?

问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且当这其中任意一个子进程以非零退出码结束时,让该脚本也返回一个非零的退出码? 简单的脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建的子进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建子进程的退出状态,并且当任何子进程以非零代码结束时,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊的 sleep 函数,它将睡眠的秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成时确实获取了它的返回代码...# 存储上一个子进程启动的 pid echo " pid = ${pids[$i]}" done for pid in $pids; do wait $pid rc=$?

11500
  • python 从subprocess运行的子进程中实时获取输出

    起因是这样的,c++程序开发后 功能号和指令,校验需要人工去看对照二进制代码,量大还费力, 于是打算利用python 去调用 c++程序去校验指令, 首先要做的就是用python 获取c++程序的...printf() 或cout 的输出; 环境linux python 3.8.x 以下代码实现,获取子程序输出 command='....linux shell指令,如果要用shell 指令如ls 要将false 变成true, 通过指定stderr=subprocess.STDOUT,将子程序的标准错误输出重定向到了标准输出,以使我们可以直接从标准输出中同时获取标准输出和标准错误的信息...p.poll() 返回子进程的返回值,如果为None 表示 c++子进程还未结束. p.stdout.readline() 从 c++的标准输出里获取一行....参考文章1 python中的subprocess.Popen()使用 参考文章 2 python 从subprocess运行的子进程中实时获取输出

    10.5K10

    如何在父进程中读取子(外部)进程的标准输出和标准错误输出结果

    最近接手一个小项目,要求使用谷歌的aapt.exe获取apk软件包中的信息。依稀记得去年年中时,有个同事也问过我如何获取被调用进程的输出结果,当时还研究了一番,只是没有做整理。...但是,实际情况并不是我们想的那么简单。比如我文前提到的问题:别人提供了一个Console控制台程序,我们将如何获取其执行的输出结果呢?...而其他参数我们可能就保守的选择了NULL。(遥想2年前,我就是在这个API上栽了一个大大的跟头。)         本文,我们将关注一个可能很少使用的参数lpStartupInfo。...它是我们启动子进程时,控制子进程启动方式的参数。...我们之后将hWrite交给我们创建的子进程,让它去将信息写入管道。而我们父进程,则使用hRead去读取子进程写入管道的内容。

    3.9K10

    如何查找一个域名的子域名记录

    起因是在Cloudflare和DNSPod添加域名时系统会扫描待添加域名的子域解析记录,感觉很神奇。方法一:穷举/使用字典通过穷举N位数的子域,例如从000到zzz,找到部分子域。...通过常用子域字典,例如www、server、mail、wap、dl,找到部分子域。不管是穷举还是跑字典,都需要一条条的向DNS服务器请求来获得解析情况。...这个操作除了用软件爆破外还可以通过在线网站完成,百度就能找到不少这类网站,例如:在线子域名扫描-YoungxjTools (yum6.cn)。缺点:如果子域字数多且不在字典里就没法查到了。...方法二:通过查询HTTPS/SSL的证书数据证书授权机构有一个叫证书透明度(Certificate Transparency)的项目,会把每个SSL/TLS证书发布到公共日志中。...我在腾讯云免费申请的TrustAsiaSSL证书通过上面那个crt.sh网站都能查到,但是其他证书机构/付费证书能不能查到就不清楚了。

    8.2K10

    Python程序中创建子进程时对环境变量的要求

    首先,来看下面一段代码,在主进程中重新为os.environ赋值,但在子进程中并不会起作用,子进程中使用的仍是系统的全部环境变量。 ? 运行结果: ?...在Python中,为变量重新赋值实际上是修改了变量的引用,这适用于任意类型的变量。对于列表、字典、集合以及类似的可变类型对象,可以通过一定形式改变其中元素的引用而不改变整个对象的引用。...os.environ是一个类似于字典的数据结构,这里以字典为例,字典可以通过pop()、popitem()、clear()、update()以及下标赋值等原地操作的方法或操作来修改其中的元素而不影响字典对象的引用...在主进程中清空了所有环境变量,然后创建子进程失败并引发了异常。...以Windows操作系统为例,创建子进程时会调用API函数CreateProcessA,该函数要求环境变量至少要包含SYSTEMROOT,否则调用另一个函数CryptAcquireContext时会失败

    2.3K30

    如何带走一个“鲜活”的进程 | Linux 应急响应

    简介 拷贝取证只是一部分人的需求,可能是取证人员,也可能是需要做交接的应急人员等 这篇文章从各种角度探索拷贝取证的方法,并通过组合拳完成对一个进程的拷贝 虚拟化平台 使用自带的虚拟化快照功能 直接把整个系统打包带走.../shell.elf & 反弹木马进程号 1267 控制主机 Kali Linux 接收到返回的shell 新开一个ssh连接,连接被害主机,安装 criu 在受害主机上使用 criu 对 pid...关闭受害主机,Kali Linux 保持监听 尝试恢复反弹shell的进程 还原失败,并且当前的终端输入字符已经无法看见了 再次启动一个ssh 连接,多次尝试恢复进程,这次 echo 123 并且睡眠...以上三步都是本文详细讲述过的内容,所以直接简述 新建反弹shell的进程 关机 -> 全盘拷贝 -> 新建虚拟机 -> 恢复 PS:这里有一个问题,恢复后的系统IP不会是原来的IP了,...python3-pip // 升级pip3 pip3 install --upgrade pip // 安装部分程序 sudo apt install python3-testresources

    1.6K40

    【面试系列】如何设计一个不崩溃的核酸系统?

    前面提到过,哪怕按2000万次访问集中在1小时内完成这个最苛刻的指标,每秒也只需服务5556人。 按每人需要返回2K数据计算(1k都绰绰有余!...换句话说,不需要任何特殊技术,20台16G内存的虚拟机实例,简单的在数组中访问下标(或者二分查找)、封装返回,以及100M对外服务总带宽,就足以支持10亿用户的每小时2000万次查询——性能大有盈余。...万一虚拟机本身不够稳定、或者有人连二分查找程序都能写崩溃呢…… 这时候,我们可以另外搞一些虚拟机作为备份;这些虚拟机可以使用现成的zookeeper管理,一个节点坏了,另一个节点可以马上顶上…… 另外就是数据更新问题...但是呢,我曾经在类似的公司做过事,也知道对接的甲方的水平…… 所以,这样一个“庞大”“复杂”“史无前例”的系统,最终如果按我的设计,顶天两三千行C代码以及两三千行js代码就交差了——你猜甲方会不会掏钱?...不不不,这都不是甲方懂不懂的问题了;而是,就这么几行代码,你想让他们掏多少?他们怎么向上面交代?

    95620

    如何在 Python 中终止 Windows 上运行的进程?

    在这篇综合性的文章中,我们将探讨各种方法来完成使用 Python 终止 Windows 上运行的进程的任务。...通过利用“os”模块、“psutil”库和“子流程”模块,我们将为自己配备一个多功能工具包来解决这项势在必行的任务。...方法1:使用多功能“os”模块 “os”模块是Python与操作系统交互的基石,拥有丰富的功能。其中,“system()”函数提供了一个执行操作系统命令的网关。...方法3:释放“子流程”模块的力量 Python 的“子进程”模块赋予我们生成新进程的能力,与它们的输入/输出/错误管道建立连接,并检索它们的返回代码。...“psutil”库作为一个强大的工具出现,为我们提供了一个全面的、跨平台的系统信息检索和过程操作解决方案。此外,“子流程”模块解锁了新的维度,使我们能够毫不费力地生成进程和执行命令。

    57630

    【Python】独特的进程池概念

    【Python】独特的进程池概念 博主介绍 前言 python进程池 进程池如何使用?...python进程池 当创建的子进程数量不多时,可以直接利用多处理进程中的进程动态形成需要的进程。 如果是上百量甚至巨大上千,手动的去创建进程的工作目标,此时就可以为多进程模块提供池的方法。...1、初始化 Pool 时,可以指定一个进程数 2、当有新的请求提交到 Pool 中时 如果池还没有满,那么就用创建一个新进程的执行该请求; 如果池中的进程达到指定的任务,那么已经有多少时间,直到有进程结束...⭐️申请() 函数原型:apply (func, args=()[, kwds={}]]) 该函数传递不定参数,同 python 中的应用函数一致,主进程会被阻止函数执行结束(不建议使用,并且 3.x..., args=(i,2)) # 不延迟当前任务的进程结束 pool.apply_async(func= pow , args=(i, 2 )) # # map函数到一个列表

    72240

    Python Windows下分布式进程的坑(分布式进程的一个简单例子)

    下面这个例子基于”廖雪峰的Python教程:分布式进程”原例在Linux上运行,直接在Windows上运行会出现错误,下面是针对原例进行的改进,使之能成功运行。...start your child processes and you have forgotten to use the proper idiom in the main module: #需要使用Python...没有直接的fork() #Window是通过创建一个新的过程代码,在子进程运行来模拟fork() #由于代码是在技术无关的进程中运行的,所以它必须在运行之前交付...#它传递的方式首先是被pickle,然后通过管道从原始进程发送到新进程 #另外,这个新进程被告知它必须运行通过管道传递的代码通过传递 #freeze_support()...函数的任务是检查它正在运行的进程是否应该通过管道或不运行代码。

    2.2K50

    《做一个不背锅的运维:Python中的反射》

    在Python中,反射是指通过一组内置的函数和语句,在运行时动态地访问、检查和修改对象的属性、方法和类信息的机制。Python中的反射机制非常强大,可以使程序更加灵活和可扩展。...Python中的反射主要涉及以下几个内置函数和语句:getattr():获取对象的属性或方法。可以通过对象和字符串的方式传递属性或方法名,并且还可以提供一个默认值,用于在属性或方法不存在时返回。...实现ORM框架:使用反射可以实现ORM框架,允许程序在运行时动态地将Python对象映射到数据库中的表格。总之,反射是Python中一种非常有用的元编程技术,可以使程序更加灵活和可扩展。...另外,如果需要动态调用订单对象的方法,可以使用 Python 的内置反射机制。...本文转载于公众号不背锅运维:https://mp.weixin.qq.com/s/NRSkzdAbcdF828YhFd88NA

    55820

    【Python】独特的进程池概念

    python进程池 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程。...初始化Pool时,可以指定一个最大进程数 当有新的请求提交到Pool中时 如果池还没有满,那么就会 创建 一个新的进程用来执行该请求; 如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束...进程池如何使用?...⭐️apply() 函数原型:apply(func[, args=()[, kwds={}]]) 该函数用于传递不定参数,同python中的apply函数一致,主进程会被阻塞直到函数执行结束(不建议使用...(100): # # 阻塞等待当前任务的进程结束 # pool.apply(func=pow, args=(i,2)) # 不阻塞等待当前任务的进程结束 pool.apply_async

    1.6K20
    领券