启动子进程优化方案
最近在学习涵曦大佬的simpleweb项目时,想利用在网页上起服关服更新git功能。
发现执行起服后,重启simpleweb项目时,端口会重复监听错误。
举例:进程1监听10086端口,进程2不监听任何端口。
进程1利用shell命令启动进程2—-进程2成功启动。
关闭进程1,重新启动进程1,启动失败,报错端口已被占用,监听失败。
原因
实际上,当进程1成功启动进程2后,子进程会复制父进程的地址空间,内核区也会被拷贝进来,包括监听(描述可能不严谨,可百度父子进程(* ̄︶ ̄))
解决方案
shell脚本 可加下面代码
for fd in $(ls /proc/$$/fd/); do
[ $fd -gt 2 ] && exec {fd}<&-
done
python 可加下面参数(close_fds=True是重点)
subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
再次含泪感谢涵曦大佬