linux 用 kill -9 命令杀死一个进程, 这个进程的socket连接会自动关闭吗?

linux 用 kill -9 命令杀死一个进程, 这个进程的socket连接会自动关闭吗?,第1张

会关闭的,其实你可以这么理解,一个进程,就算是保护进程,没有了父进程依赖0号进程,但是照样会存在进程的,只饥稿要连接存在,烂毕孝一定会有一个进程运行,所以,如果你数脊把进程关闭了,socket是一定会被关闭的

我来告诉你标准答案!进程被kill的时候,会对所有已经打开的文件描述符执行close。

而这个close发起tcp连接断开时的四次握手。

就这个例子来说

第一次:服务端发FIN给客户端。而这个FIN表示服务端已经没有数据要发送了。

第二次:客户端接受FIN后,由系统的tcp/ip协议栈自动发送ack给客户端。表示我余悄档知道你没有数据要给我了。

第三次:客户端应用程序执运局行close。这个是进程自己控制的。跟第一次的意义一样(我也没有数据发送了)。

第四次:服务器端发ack给客户端表示确认。

上面的步骤就说明了。在客户端执行第二步以后。是可以给服务端发数据的。具竖乱体这些数据能不能正常被处理要依赖于具体的实现。

详细的细节你可以参考《unix网络编程》2.5节TCP连接的建立和终止

方案一:将你的socket进程加到守护进程(daemon)里面,尽量提高该进程的优先级

方案二并并:或逗态者写个脚本自动判断socket进程僵掉了就自动重启,并将该进程加到守护进程里面绝指迹


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12340553.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存