通过 os.system() 终止进程中启动的脚本

2023-11-26

我有一个 python 脚本,它启动多个进程。每个进程基本上只是调用一个 shell 脚本:

from multiprocessing import Process
import os
import logging

def thread_method(n = 4):
    global logger
    command = "~/Scripts/run.sh " + str(n) + " >> /var/log/mylog.log"
    if (debug): logger.debug(command)
    os.system(command)

我启动了其中几个线程,它们本来是要在后台运行的。我希望这些线程有一个超时时间,这样如果超过超时时间,它们就会被杀死:

t = []
for x in range(10):
    try:
        t.append(Process(target=thread_method, args=(x,) ) )
        t[-1].start()
    except Exception as e:
        logger.error("Error: unable to start thread")
        logger.error("Error message: " + str(e))
logger.info("Waiting up to 60 seconds to allow threads to finish")
t[0].join(60)
for n in range(len(t)):
    if t[n].is_alive():
    logger.info(str(n) + " is still alive after 60 seconds, forcibly terminating")
     t[n].terminate()

问题是,在进程线程上调用 Terminate() 并不会终止启动的 run.sh 脚本 - 它会继续在后台运行,直到我从命令行强制终止它,或者它在内部完成。有没有办法让终止也杀死 os.system() 创建的子shell?


您应该使用一个事件来通知工作线程终止,运行子进程subprocess模块,然后终止它Popen.terminate()。呼唤Process.terminate()不允许工人清理。看的文档Process.terminate().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 os.system() 终止进程中启动的脚本 的相关文章

随机推荐

  • 二元炸弹 - 第 4 阶段

    我很难追踪以下二进制炸弹的汇编代码 学校的一项作业 其中必须拆除炸弹 该炸弹包含 6 个阶段 所有阶段都有 1 个正确的输入才能进入下一阶段 我目前处于 Phase 4 它有一个名为 func4 的递归函数 我已经确定输入是 d d 它是两
  • 如何将文件传递到阻塞上游作业的下游作业?

    我想要完成的是签出代码develop分支 将其合并到master分支 建立app war 运行测试 如果测试成功则推送到master branch 测试应该在需要的单独作业中运行app war 我当前的设置如下 Job Main结帐自dev
  • 如何多次运行 php 单元并连接覆盖率报告?

    我测试的代码充满了最终静态类 虽然我们无法重构它以进行更好的测试 但我有一个中间解决方案 可以在其自己的进程上运行几个小测试 一切正常 但我没有收到覆盖报告 因为其中一个覆盖了另一个 我目前正在 clover 中生成报告 但我对其他报告非常
  • 如何列出接口类型中的方法名称?

    例如 type FooService interface Foo1 x int int Foo2 x string string 我想做的是获取列表 Foo1 Foo2 使用运行时反射 尝试这个 t reflect TypeOf FooSe
  • Flutter 切换到 Tab 重新加载 Widget 并运行 FutureBuilder

    问题 我有 2 个使用默认选项卡控制器的选项卡 如下所示 Widget build BuildContext context return DefaultTabController length 2 child Scaffold drawe
  • 根据一列的值更新另一列的值

    我有一个名为 Vendor 的表 在该表中我有一个名为 AccountTerms 的列 它仅显示一个值 即 0 1 2 3 等 我还有一个我想使用的专栏 ulARAgeing 以反映该值的含义 例如 0 Current 1 30 Days
  • 错误:使用 SQLDF 没有此类列

    下面是脚本 gt library sqldf gt turnover read csv turnover csv gt names turnover 1 Report Date PersID Status DOB 5 Age Tenure
  • 如何用seaborn拟合泊松分布?

    我尝试将数据拟合为泊松分布 import seaborn as sns import scipy stats as stats sns distplot x kde False fit stats poisson 但我收到这个错误 Attr
  • 如何更新应用程序?

    互联网上似乎没有太多用于更新 Android 应用程序的资源 那么 我需要做的就是更改应用程序的 build gradle 文件中的版本号和名称吗 versionCode 2 versionName 1 0 1 这就是全部 现在我只需要制作
  • 即使一项检查失败如何继续执行

    我正在尝试访问不同的网址并使用 matchImageSnapshot 将屏幕截图与基线图像进行比较 这里的问题是当我的一个 url 因 matchimagesnapshot 失败时 它不会继续到下一个 URL 注意 我尝试使用变量 env
  • 获取插入后生成的id

    我正在 Android 上使用 SQLite 我想知道获取我插入的行的生成 id 的最佳方法 我认为解决方案在包含后进行搜索 但它看起来不是最好的方法 The insert方法返回id刚刚插入的行或 1如果插入过程中出现错误 long id
  • 滚动到带有标题的 Xamarin Forms ListView 的开头

    我在 Xamarin Forms 中滚动到 ListView 顶部时遇到一些问题 我可以通过调用 ScrollTo 并传递第一项来滚动到第一项 问题是 当列表有标题项时 我找不到滚动到标题的方法 这可能吗 我能想到的唯一解决方法是不使用标头
  • “new new Something”如何在 JavaScript 中产生有效的结果?

    我目前正在开发一个 JavaScript 解析器并研究ECMAScript 5 1 规范 这是目前令我困惑的一个问题 11 2 左侧表达式定义以下内容NewExpression生产 NewExpression MemberExpressio
  • 密码散列的盐也应该被“散列”吗?

    我认为这可能是一个愚蠢的问题 但我已经很困惑我应该在这里做什么才能最好 对密码哈希进行加盐处理时 盐是否也应该进行哈希处理还是保留为明文 注意 我正在对 SHA 256 中的密码进行哈希处理 并且 Salt 是预定义的字符串 因为一次只会存
  • 并发文件写入

    如何写入可由多个源 可能以并发方式 访问的文本文件 确保不会丢失写入操作 例如 如果两个不同的进程在同一时刻写入文件 这可能会导致问题 简单的解决方案 不是很快也不是很优雅 是在开始进程时锁定文件 创建 lock 文件或类似文件 并在写入完
  • 如何优化在 date 的 where 子句中包含 to_char 的 Oracle 查询

    我有一张表 其中包含49403459记录 我想查询某个日期范围内的表 说04 10 2010 to 04 10 2010 但是 日期以格式存储在表中10 APR 10 10 15 06 000000 AM 时间戳 结果当我这样做时 SELE
  • 在 .NET Web API POST/PUT 方法中使用继承的类

    我不知道如何在 Web API 控制器中使用继承的类 我have to create only oneAPI 控制器用于创建和更新数据库中继承的对象 与我的模型类似 所有这些模型都存在 Dto public class Animal pub
  • 在 WordPress 的自定义管理页面上提交表单

    我在 WordPress 管理中创建了一个自定义页面 其中有一个简单的文件上传字段和一个提交按钮 我需要弄清楚如何将页面提交到可以处理但在网络上找不到任何内容的地方 有谁知道表单上需要什么 操作 才能使其转到一个函数或另一个我可以处理文件的
  • 打印html元素时如何获得正确的渲染尺寸

    当将 html 元素打印到 A4 尺寸的纸张上时 我无法理解如何以正确的尺寸呈现 html 元素 为了说明我的目的 我将代码简化为一个 html 页面 其中包含一个红色边框的表格 该表格的尺寸应为 210mmx297mm A4 纸张尺寸
  • 通过 os.system() 终止进程中启动的脚本

    我有一个 python 脚本 它启动多个进程 每个进程基本上只是调用一个 shell 脚本 from multiprocessing import Process import os import logging def thread me