内容简介:你可能会说,简单,连接确实关掉了,进程也跟着一起杀死了。达不到“在线”的要求。有没有办法不杀死进程,但还是可以关闭socket连接呢?
你可能会说,简单, netstat -antp
找到连接, kill
掉这个进程就行了。
# netstat -antp|grep 6789 tcp 0 0 1.1.1.1:59950 1.1.1.2:6789 ESTABLISHED 45059/ceph-fuse # kill 45059
连接确实关掉了,进程也跟着一起杀死了。达不到“在线”的要求。
有没有办法不杀死进程,但还是可以关闭socket连接呢?
我们知道,在编码的时候,要关闭一个socket,只要调用 close 函数就可以了,但是进程在运行着呢,怎么让它调用 close 呢?
在 superuser
上看到一个很棒的方法,原理就是 gdb attach
到进程上下文,然后 call close($fd)
。
1、 使用 netstat
找到进程
# netstat -antp|grep 6789 tcp 0 0 1.1.1.1:59950 1.1.1.2:6789 ESTABLISHED 45059/ceph-fuse
如上,进程pid为45059。
2、 使用 lsof 找到进程45059打开的所有文件描述符,并找到对应的socket连接
lsof -np 45059 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ceph-fuse 45059 root rtd DIR 8,2 4096 2 / ceph-fuse 45059 root txt REG 8,2 6694144 1455967 /usr/bin/ceph-fuse ceph-fuse 45059 root mem REG 8,2 510416 2102312 /usr/lib64/libfreeblpriv3.so ... ceph-fuse 45059 root 12u IPv4 1377072656 0t0 TCP 1.1.1.1:59950->1.1.1.2:smc-https (ESTABLISHED)
其中 12u
就是上面对应socket连接的文件描述符。
3、 gdb 连接到进程
gdb -p 45059
4、 关闭socket连接
(gdb) call close(12u)
socket连接就可以关闭了,但是进程 45059 还是好好着的。
你可能会问,什么时候会用到这个特性呢?场景还是比较多的,比如你想测试下应用是否会自动重连mysql,通过这个办法就可以比较方便的测试了。
Ref:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Oracle连接启动和关闭模式(汇总)
- BeeCP 2.4.3 发布,增加连接安全关闭
- 【译】 WebSocket 协议第七章——关闭连接(Closing the Connection)
- golang 网络编程之如何正确关闭tcp连接以及管理它的生命周期
- Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态
- 关于python关闭
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML 5实战
陶国荣 / 机械工业出版社 / 2011-11 / 59.00元
陶国荣编著的《HTML5实战》是一本系统而全面的HTML 5教程,根据HTML 5标准的最新草案,系统地对HTML 5的所有重要知识点进行了全面的讲解。在写作方式上,本书以一种开创性的方式使理论与实践达到极好的平衡,不仅对理论知识进行了清晰而透彻的阐述,而且根据读者理解这些知识的需要,精心设计了106个完整(每个案例分为功能描述、实现代码、效果展示和代码分析4个部分)的实战案例,旨在帮助读者通过实......一起来看看 《HTML 5实战》 这本书的介绍吧!