即使使用 nohup 子进程也会被杀死

2023-11-24

我在用着subprocess.Popen启动多个进程。

代码是这样的:

while flag > 0:
   flag = check_flag()
   c = MyClass(num_process=10)
   c.launch()

MyClass如果类似以下内容:

MyClass(object)
   def __init__(self, num_process):
      self.num_process = num_process

   def launch(self):
      if self.check_something() < 10:
         for i in range(self.num_process):
             self.launch_subprocess()

   def launch_subprocess(self):
      subprocess.Popen(["nohup",
                       "python",
                       "/home/mypythonfile.py"],
                       stdout=open('/dev/null', 'w'),
                       stderr=open('logfile.log', 'w'),
                       shell=False)

在大多数情况下,启动的子进程会终止,有时会在运行过程中终止。在某些情况下,它会完成。

但是,如果我使用subprocess.Popen直接在 while 循环中,该过程继续并及时完成。

有人可以告诉我如何按照上面描述的方式使用子进程来让进程在后台运行吗?


The nohup仅当您的主进程正常退出时才停止 SIGHUP 信号。对于 SIGINT 或 SIGTERM 等其他信号,子进程会收到与父进程相同的信号,因为它位于同一进程组中。有两种使用 Popen 的方法preexec_fn争论。

设置子进程组:

subprocess.Popen(['nohup', 'python', '/home/mypythonfile.py'],
                 stdout=open('/dev/null', 'w'),
                 stderr=open('logfile.log', 'a'),
                 preexec_fn=os.setpgrp )

更多信息在另一个post.

使子进程忽略这些信号:

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

即使使用 nohup 子进程也会被杀死 的相关文章

随机推荐

  • 为什么 System.Int32 占用 24 个字节?

    If an int占用4个字节 为什么System Int32将整数装箱到对象中时需要 24 个字节 例如 int i 3 object o i 在 C CLR 中 引用类型有一定规模的开销 托管对象的布局非常简单 托管对象包含实例数据 指
  • 确定 Web http 身份验证方法

    如何确定 REST Web 服务是否使用 Basic Kerberos NTLM 还是许多其他身份验证方法之一 当您发送未经身份验证的请求时 服务必须响应 HTTP 1 1 401 Unauthorized 并且响应包含WWW Authen
  • 在mathematica中选择特定的符号定义(而不是转换规则)

    我有以下问题 f 1 1 f 2 2 f 0 dvs DownValues f 这给出了 dvs HoldPattern f 1 gt 1 HoldPattern f 2 gt 2 HoldPattern f gt 0 我的问题是我只想提取
  • Document.createElementNS() 的 jQuery 是什么?

    Document createElementNS 的 jQuery 是什么 function emleGraphicToSvg aGraphicNode var lu function luf aPrefix switch aPrefix
  • 使用 python 从 azure 容器本地下载所有 blob 文件

    我在 Visual Studio 中使用 python 3 6 我想从我的 azure 容器下载单个文件夹中的所有 blob 文件 这是我的代码 但问题是 它在文件夹中下载 1 个 blob 文件 然后在下载第二个文件时 它会覆盖第一个文件
  • 实体框架为 NOT NULL 列生成值,该列在数据库中定义了默认值

    嗨 我有一张桌子顾客 表中的一列是DateCreated 本专栏是NOT NULL但默认值是在 db 中为此列定义的 当我添加新的Customer在我的代码中使用 EF4 var customer new Customer customer
  • 在 C++11 中编写持有 STL 容器的类的构造函数的最佳方法

    class Foo std vector
  • 如何查找 JavaFX 版本

    这应该很容易 但我不知道如何做 有什么方法可以找出安装的 JavaFX 版本 我并不是说以编程方式通过System getProperty javafx runtime version 尽管安装了 JavaFX 但它在我的计算机上返回空字符
  • React Native 无法识别的字体系列未修复

    字体位于我的 asset 文件夹中 它们也在 xcode 复制包资源内 也在资源文件夹内 我也已经运行了react native链接 但它仍然找不到字体 有什么我错过的吗 请参阅附图以供参考 在此输入图像描述 反应本机部分 添加字体到ass
  • 如何将版本信息嵌入到 Windows 二进制文件中?

    您可能知道 Windows 有一个选项 您可以在其中查看二进制文件的属性 并且它将显示有关作者 版本号 公司等的信息 我们希望将其放入我们的自动编译系统中 在编译二进制文件后将此版本信息放入二进制文件中是更好的选择 但是有关如何完成此操作的
  • 在 socket.io 上设置较高的关闭超时是否安全?

    我有一个网络应用程序 用户需要不断连接 默认情况下 socket io 将在 60 秒后断开连接 不过 我打开了 重新连接 因此它实际上每分钟都会关闭并重新打开连接 这可能会导致我连接的客户端的提要 通知出现问题 将此超时设置为 10 分钟
  • VB.NET:TAB 的标识符?

    我应该为 TAB 使用什么标识符 例如输出到文本文件 有很多选择 vbTab ControlChars Tab 我的应用程序中的常量 或公共成员 设置为 Chr 9 什么是最佳实践 为什么 为 ControlChars Tab 点赞 vb
  • 如何列出数据库中的所有 git 对象?

    有没有比以下更好的方法来获取存储库中所有对象的 SHA1 原始列表 ls git objects and cat git objects pack idx git show index 我知道关于git rev list all但这仅列出了
  • Chrome 中的 HTML5 视频标签 - wmv

    我需要制作一个显示视频的页面 Firefox 和 Opera 支持 OGG 格式 没有问题 Chrome 是 愚蠢 的 不识别 OGG Windows 上的 Chrome 知道如何处理 WMV 吗 我已经对它们进行了编码 但我无法重新编码新
  • 将 Bootstrap 5 与 Vue 3 结合使用

    我想将 Bootstrap 5 与 Vue 3 结合使用 由于 Bootstrap 5 使用普通 JS 无 JQuery 我可以直接在 Vue 3 项目中使用 Bootstrap 5 不使用 Bootstrap Vue 吗 有人可以指导我如
  • 为什么示例中的 Bootstrap 5 中的折叠不起作用?

    我尝试使用引导崩溃 我复制了该示例 但单击按钮时没有任何反应 不知道出了什么问题 我认为 js 无法正常工作
  • .NET 列表视图刷新

    我有以下代码 它基本上从数据库中获取值并填充列表视图 using IDataReader reader cmd ExecuteReader lvwMyList Items Clear while reader Read ListViewIt
  • 为什么在 PHP 中使用“use”关键字来导入核心标识符?

    有时在一些图书馆 比如thephpleague csv 我看到use关键字来导入核心标识符 例如函数 类或常量 但我根本不明白为什么要导入它们 请参见以下示例 use Generator use SplFileObject use func
  • 谷歌云存储加入多个csv文件

    我将数据集从 Google BigQuery 导出到 Google Cloud Storage 考虑到文件大小 BigQuery 将文件导出为 99 个 csv 文件 然而 现在我想连接到我的 GCP 存储桶并使用 Spark 执行一些分析
  • 即使使用 nohup 子进程也会被杀死

    我在用着subprocess Popen启动多个进程 代码是这样的 while flag gt 0 flag check flag c MyClass num process 10 c launch MyClass如果类似以下内容 MyCl