如何禁用mod_wsgi-express因终端调整触发SIG_WINCH导致的关闭?
解决mod_wsgi-express因终端窗口调整关闭的问题
这个问题确实是Apache默认处理SIG_WINCH信号导致的——当终端窗口大小变化时,系统会给Apache进程发送这个信号,而Apache默认会将其作为重启子进程/关闭服务器的触发信号。加上WSGIRestrictSignal默认限制了Python应用捕获SIGWINCH,常规的signal.signal调用自然失效。
这里有两种可行的解决方式,按需选择:
方式一:通过mod_wsgi-express命令行允许应用捕获信号
首先在启动服务器时,添加--allow-signal SIGWINCH参数,解除对该信号的限制:
mod_wsgi-express start-server your_app.py --allow-signal SIGWINCH
然后在你的Python应用代码开头添加信号忽略逻辑:
import signal # 直接忽略SIGWINCH信号 signal.signal(signal.SIGWINCH, signal.SIG_IGN)
这样应用就能接管SIGWINCH信号的处理,Apache就不会因为窗口调整触发关闭了。
方式二:让Apache直接忽略SIGWINCH信号(无需修改应用代码)
如果不想改动Python代码,可以创建一个Apache配置文件(比如ignore_sigwinch.conf),内容如下:
SignalIgnore SIGWINCH
然后启动mod_wsgi-express时指定这个配置文件:
mod_wsgi-express start-server your_app.py --apache-config ignore_sigwinch.conf
这个配置会让Apache完全忽略SIG_WINCH信号,终端窗口大小变化时就不会触发任何服务器操作了。
两种方式都能解决问题,个人更推荐第二种,不需要侵入应用代码,配置更干净。
内容的提问来源于stack exchange,提问作者M K
相关产品推荐
相关产品推荐

