我想在完成请求后重新启动运行我的PHP脚本的子进程,我正在使用的PHP库泄漏内存(强度高达100MBS +),但是这是必要的,因为目前没有替代方法。
我建议的解决方案是正常重启/杀死apache2子进程。类似于Apache1的apache_child_terminate()
。
我使用了register_shutdown_function()
,并调用了一个函数,该函数使用posix_kill
向我的PID发送 SIGWINCH 信号。
它实际上可以正常工作,并且进程被杀死并且释放了泄漏的内存,并且另一个apache进程已经开始使用不同的PID,以保持Apache www-data进程的数量相同。
现在一切都很好,但是WINCH信号的文档让我感到担忧Stopping and Restarting Apache HTTP Server。
WINCH或平稳停止信号使父进程建议子进程在其当前请求之后退出(如果他们没有提供任何服务,则立即退出)。然后父级将删除其PidFile并停止侦听所有端口。父级将继续运行,并监视正在处理请求的子级。一旦所有子级都已完成并退出或达到GracefulShutdownTimeout指定的超时,父级也将退出。如果超时,则将向所有剩余的孩子发送TERM信号,迫使他们退出。
它没有提到重新启动子进程,而是描述了正常停止整个apache服务器的过程。我担心在生产过程中可能会产生副作用或对信号产生误解。
在文档中,还有优美的重启USR1信号,我对其进行了测试,其结果与WINCH Signal相同。 Apache2中的WINCH和USR1信号有什么区别?我的方法正确吗?