【问题标题】:Spawn a subprocess but kill it if main process gets killed生成一个子进程,但如果主进程被杀死,则将其杀死
【发布时间】:2016-02-24 17:17:53
【问题描述】:

我正在用 Python 创建一个程序,用于监听各种用户交互并记录它们。我有这些要求/限制:

  1. 我需要一个单独的进程,每小时将这些日志发送到远程数据库
  2. 我无法在当前进程中执行此操作,因为它会阻塞 UI。
  3. 如果主进程停止,后台进程也应该停止。

我一直在阅读有关subprocess 的信息,但我似乎找不到任何关于如何同时停止两者的信息。如果有人知道一些 Erlang/Elixir,我需要相当于 spawn_link

谢谢!

【问题讨论】:

  • 我知道代码很简单,但是您能否向我们展示一个关于如何生成子进程的最小工作示例?
  • 操作系统?在 Windows 上,您可以使用 win32process.EnumProcesses 获取系统上运行的 PID 列表。您的子程序可以接受父 PID 作为命令行参数(或查找其父 PID 本身),然后有一个 if parentpid not in EnumProcesses(): sys.exit(0) 或类似的东西。

标签: python subprocess


【解决方案1】:

回答标题中的问题(来自 google 的访问者):there are robust solutions on Linux, Windows using OS-specific APIs and less robust but more portable psutil-based solutions


要解决您的具体问题(XY problem):使用守护线程而不是进程

线程将允许在不阻塞 GUI 的情况下执行 I/O,code example(即使您选择的 GUI 不提供异步 I/O API,例如 tkinter's createfilehandler()gtk's io_add_watch())。

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多