【问题标题】:Determine killer of process确定进程杀手
【发布时间】:2011-03-23 07:52:47
【问题描述】:

我有一个 python 程序作为 Windows 服务运行,我认为它可以捕获所有异常。在我的开发环境中,当程序崩溃时,我无法重现任何没有记录异常的情况。除了两种情况:程序被任务管理器杀死或我关闭了计算机。

但是,在目标环境(安装了所有必需库和 python 的 Windows 2000)上,Windows 服务突然退出。重新启动后 4 分钟,未记录任何异常或失败原因。环境肯定没有断电。

有没有人建议如何确定是什么杀死了 python 程序?

编辑:我不能在目标环境中使用调试器(因为它是生产级别)。因此,我需要一种记录失败原因的方法。因此,我正在寻找工具或方法来在运行时(或故障时间)记录可用于事后分析的附加信息。

【问题讨论】:

  • 这听起来像是堆栈溢出。可以在生产环境中附加调试器吗?
  • 不,很遗憾我不能在目标环境中使用调试器。
  • 您可以使用“python -dv yourscript.py”在调试模式下运行解释器。或者也许是“python -m pdb yourscript.py”来使用模块“pdb”运行你的脚本,它是python调试器。
  • 虽然有难度,但我还是想办法在目标环境中运行ntsd
  • 对生产环境使用标准策略:以 DEBUG 详细级别写入系统日志(Windows 事件日志)。

标签: python windows-services


【解决方案1】:

您需要提供更多信息,例如“您的程序是多线程的吗?”代码是否取决于您使用的 Python 解释器的版本,或者目标环境中不存在的任何导入模块?

如果您有GDB for Windows,您可以执行“gdb -p pid”,其中“pid”是您正在运行的 python 程序的 pid。如果发生崩溃,您可以获得回溯。

【讨论】:

    【解决方案2】:

    您可能还想从 sysinternals.com(现已被 MSFT 收购)查看以下工具: http://technet.microsoft.com/en-us/sysinternals/bb795533

    例如 ProcDump、Process Monitor 甚至 Process Explorer(但比以前的适应度差)。

    您还可以安装轻量级调试器,例如 OllyDbg,或使用 Moonsols 的工具来监控来宾 VM 的进程(如果您碰巧在虚拟化环境中使用了该工具)。

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 2012-12-05
      • 2011-11-03
      • 2019-12-25
      • 2023-04-02
      • 2016-06-17
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多