Python pdb用于后台进程

时间:2016-03-10 18:01:26

标签: python unix process

我有一个python进程,产生多个后台进程。我目前看到一个/多个后台进程陷入死循环或者他们变得反应迟钝。

我想将调试器附加到后台进程。所以,我可以弄清楚出了什么问题。我已经为我的后台进程(SIGUSR1)注册了一个信号处理程序,我设置了pdb跟踪。

无论何时挂起,我都会将来自其他控制台的信号发送到后台进程。但是,我没有看到任何可以帮助我调试代码的终端。

我做错了吗?或者是否有更好的方法将调试器附加到后台python进程。

我在MAC上运行,所以使用gdb并不是直截了当的。

  def installHandlers():
    signal.signal(signal.SIGUSR1,debugHandle)

   def debugHandle(sig,frame):                                                          
     global processLog
     processLog.info("got the SIGUSR1")                                               
     import pdb                                                                       
     pdb.Pdb().set_trace(frame) 
   

-Thanks

2 个答案:

答案 0 :(得分:0)

我认为这是因为Python在multiprocessing.Process._bootstrap()中关闭了父进程的stdin。因此,pdb.set_trace()在子进程中不起作用。 它通常会失败并出错。也许你没有看到错误,因为你在某处重定向stdout?

答案 1 :(得分:0)

pdb的克隆,富有想象力地称为pdb-clone,允许debugging of background processes

您只需将from pdb_clone import pdbhandler; pdbhandler.register()添加到主进程的代码中,然后就可以使用pdb-attach --kill --pid PID启动pdb。