如何调试Python的SIGCHLD处理器?

0 投票
1 回答
826 浏览
提问于 2025-04-18 12:26

我正在用Python写一个服务器程序,流程大致是这样的:

  1. 启动一个守护进程
  2. 启动一个服务器套接字,监听进来的连接
  3. 当成功接受到一个连接时,创建一个新进程来处理这个连接,并在子进程中关闭客户端套接字,在守护进程中关闭服务器套接字。

我在守护进程中注册了一个信号处理器,用来处理SIGCHLD信号,以便清理子进程(无论处理器的内容是什么),然后运行服务器。可是当守护进程收到SIGCHLD信号时,它就崩溃了。我实在搞不清楚为什么,因为不管怎么尝试,记录日志到syslog都不成功,我也没有办法调试这个问题。我在用PyCharm,但它无法调试被分叉出的进程。我该如何调试这个问题呢?是什么原因导致程序在调用SIGCHLD处理器时失败?

我在Mac OS X 8上使用Python 3.4。

1 个回答

1

原来,我在写信号处理函数的时候用了错误的格式。我应该用 def my_handler(signum, frame),而不是 def my_handler(),这是根据这个讨论得出的。

撰写回答