说一下我认识的*nix下的服务器热重启

步骤:

第一:

收到SIGTERM以后现在的服务器监听socket停止accept

但是并没有停止listen,这个很关键.(所以客户端发起的tcp连接的syn得不到synack,只是继续等待,而不会被拒绝)

 

第二:

收到sigterm的现有进程继续处理已经accept的socket.

直到处理完毕结束退出.

第三:

在收到sigterm以后,接着发送sighup(要保证现有服务器进程已经停止accept).

第四:

收到sighup以后现有服务器进程serverId1,要fork一个新的进程,

然后把listen的那个socket句柄传递给新exec创建的服务器进程serverId2(至于如何传递,自行百度)

同时还要通过环境变量之类的机制告诉新创建的serverId2,你不用新创建socket listen了,直接用我传递给你的句柄就行了.

serverId2直接用这个句柄愉快的accept就行了.

这样新的服务器进程就完整运行起来了.

 

这个玩意在win下面没有,我觉得可能是因为以下两个原因

exe运行时不可覆盖,其实这个我觉得不打紧,用一个别的名字就可以了啊.

句柄描述符不能跨进程传递?

 

这个可以找时间研究一下.

原文地址:https://www.cnblogs.com/baizx/p/5058811.html