如何调试Python的SIGCHLD处理器?
我正在用Python写一个服务器程序,流程大致是这样的:
- 启动一个守护进程
- 启动一个服务器套接字,监听进来的连接
- 当成功接受到一个连接时,创建一个新进程来处理这个连接,并在子进程中关闭客户端套接字,在守护进程中关闭服务器套接字。
我在守护进程中注册了一个信号处理器,用来处理SIGCHLD信号,以便清理子进程(无论处理器的内容是什么),然后运行服务器。可是当守护进程收到SIGCHLD信号时,它就崩溃了。我实在搞不清楚为什么,因为不管怎么尝试,记录日志到syslog都不成功,我也没有办法调试这个问题。我在用PyCharm,但它无法调试被分叉出的进程。我该如何调试这个问题呢?是什么原因导致程序在调用SIGCHLD处理器时失败?
我在Mac OS X 8上使用Python 3.4。
1 个回答
1
原来,我在写信号处理函数的时候用了错误的格式。我应该用 def my_handler(signum, frame)
,而不是 def my_handler()
,这是根据这个讨论得出的。