netstat 命令不显示进程号进程名,只显示横线 '-'

最近在使用thrift 的时候,遇到的问题,代码参见:thrift 框架简单使用

就是一个简单的客户端与服务端交互,服务端是最简单的单进程单线程,for循环poll 模型,做如下操作:

1、后台运行server

./server & 

2、新开一个客户端,gdb 跟踪client1

gdb --args ./client

跟踪到 connect 连接返回,rpc调用前。

3、新开一个客户端,gdb 跟踪client2

gdb --args ./client

跟踪到 connect 连接返回,rpc调用前。

此时用netstat 查看连接:

有一个连接的进程名显示横线'-',但状态是established,可以推测这个连接在client 角度建立了,但是server角度还没准备好。

因为这份server 代码是单进程单线程,for 循环,每次处理一个请求,而这个没有显示进程名的对应的是client2 发起的连接。

 

参考:netstat -ntap不显示某些连接的pid /进程名称 原话:进程在内核中运行

所以这里的推测是,这个连接在客户端是设置为非阻塞的,所以connect 返回了,站在客户端角度连接是建立了。

但是在server端,因为在for 循环中还在处理第一个客户端的请求,所以第二个请求无暇顾及,还在内核队列中,所以显示的进程名是一个横线。

关于内核队列参考:高性能网络编程(一)----accept建立连接 作者貌似是《深入理解nginx》一书作者,写的很详细,TCP的细节确实值得好好研究。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值