专栏首页运维之美1 分钟小技巧系列 | 如何在不杀进程的前提下关闭一个 TCP Socket 连接

1 分钟小技巧系列 | 如何在不杀进程的前提下关闭一个 TCP Socket 连接

要在线关闭一个 TCP 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。

  1. 使用 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 连接的文件描述符。

  1. gdb 连接到进程
$ gdb -p 45059
  1. 关闭 Socket 连接
(gdb) call close(12u)

Socket 连接就可以关闭了,但是进程 45059 还是好着的。

你可能会问,什么时候会用到这个特性呢?场景还是比较多的,比如你想测试下应用是否会自动重连 MySQL,通过这个办法就可以比较方便的测试了。

来源:Zlatan Eevee 原文:http://t.cn/AijmTykM 题图:来自谷歌图片搜索 版权:本文版权归原作者所有 投稿:欢迎投稿,邮箱: editor@hi-linux.com

本文分享自微信公众号 - 运维之美(Hi-Linux),作者:伊布

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 谈谈 MySQL 锁机制

    因为数据也是一种供许多用户共享的资源,如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素,所以进...

    iMike
  • 5G 时代已经到来,你了解日益重要的边缘计算吗?

    云计算(Cloud Computing)从 2005 年进入我们的视线至今已经发展了 14 年,商业应用取得了巨大的成功,边缘计算(Edge Computing...

    iMike
  • 可能是史上最全面易懂的 Systemd 服务管理教程!( 强烈建议收藏 )

    Systemd 是一系列工具的集合,其作用也远远不仅是启动操作系统,它还接管了后台服务、结束、状态查询,以及日志归档、设备管理、电源管理、定时任务等许多职责,并...

    iMike
  • 腾讯受邀参加2019世界移动通信大会5G论坛,分享5G技术探索

    2019年2月25日,2019MWC世界移动通信大会正在巴塞罗那举行,腾讯公司受邀出席由GSMA 和中兴联合举办的5G峰会。本次峰会的主题为“拥抱5G新时代”,...

    腾讯技术工程官方号
  • Halcon 2D图像转3D效果查看

    Halcon读取图像之后,可以直接通过下面的按钮转换成3D效果图(当然并不是所有2D图转换后的效果都比较好看)

    Color Space
  • 也谈 ngx.ctx 继承问题

    在前一阵子的 OpenResty Con 2018 上,来自又拍云的 @tokers 分享了他们对 ngx.ctx 的 hack,以确保在发生内部跳转后 ngx...

    poslua
  • DDD战略篇:架构设计的响应力

    当敏捷宣言的17位签署者在2001年喊出“响应变化胜于遵循计划”这样的口号时,鲜有组织会真正把这句话当回事儿,甚至很多经验丰富的管理者会认为好的计划是成功的一半...

    ThoughtWorks
  • 人工智能识别技术主题分享会与你清华见!

    人工智能识别技术主题分享会 暨2015首届腾讯优图高校创新大赛开幕式 小时候,你是不是也有过很多天马行空的梦想? 曾经梦想的刷脸开门? 在梦境里自己变成超人...

    腾讯高校合作
  • 腾讯云V**网关对接StrongSwan开源V**软件配置手册

    ECS选择Linux centos 7.4 (服务器创建过程不进行演示请自行查找)

    Hunter
  • 定了!首届腾讯全球数字生态大会5月落地昆明

    3月29日,腾讯与云南省在北京钓鱼台国宾馆召开联合发布会,共同宣布2019年腾讯全球数字生态大会将于5月21日至23日在昆明滇池国际会展中心举办。

    腾讯云视频

扫码关注云+社区

领取腾讯云代金券