在带有 mod_fastcgi 的 windows 服务器上使用 apache,C 代码如下所示:
void main() {
init();
while (FCGI_Accept() >= 0)
work();
cleanup();
}
当服务被关闭时(即:net stop apache2),进程终止而没有进入清理代码。
我在这里想念什么?
看来,从阅读FCGI_Accept
手册页和这个 FAQ 条目来看FCGI_Accept
,实际上在 Apache 关闭的情况下不会返回 -1。尝试为 SIGUSR1 和 SIGTERM 设置信号处理程序。有一个示例(不是特定于 Windows 的,但值得一试)不久前在邮件列表上发布,here。
过早退出的唯一方法是在 work()(或 FCGI_Accept()...)中的某处调用“exit()”
编辑:
如果您认为它可能是 FCGI_Accept(),请尝试使用 onexit() 设置要从“exit()”调用的回调。至少这将确认“exit()”被过早调用。