当我tmux
从两台不同的计算机登录到会话时,我希望能够跟踪两个tmux
会话的套接字上待处理的数据量。为了测试这一点,我登录到计算机A
和计算机B
,然后从计算机上B
使用 ssh 登录到计算机A
。我从每个控制台附加到同一个tmux
会话并开始运行一个脚本,该脚本打印从 1 到 100M 的迭代次数。事实上,我发现本地 ( ) 控制台中打印的迭代次数A
大于远程控制台 ( B
) 中打印的迭代次数,因为消息传输到远程计算机需要时间
[user@server00 ~]$ lsof | grep tmux | grep unix
tmux 1073 user 4u unix 0xf6dc2ac0 0t0 18681 socket
tmux 1073 user 5u unix 0xf6dc3840 0t0 18682 socket
tmux 1073 user 6u unix 0xf137ed00 0t0 19768 socket
tmux 1073 user 7u unix 0xf6dc2880 0t0 18683 /tmp/tmux-1000/default
tmux 1073 user 8u unix 0xf6cbcd80 0t0 22647 /tmp/tmux-1000/default
tmux 1073 user 14u unix 0xf137ef40 0t0 12146 /tmp/tmux-1000/default
tmux 1092 user 4u unix 0xf6cbd200 0t0 24848 socket
tmux 1092 user 5u unix 0xf6cbef40 0t0 24849 socket
tmux 1092 user 6u unix 0xf6cbed00 0t0 24850 socket
tmux 1177 user 4u unix 0xf137fcc0 0t0 19947 socket
tmux 1177 user 5u unix 0xf137fa80 0t0 19948 socket
tmux 1177 user 6u unix 0xf137c240 0t0 19949 socket
[user@server00 ~]$ netstat -a | grep tmux
unix 2 [ ACC ] STREAM LISTENING 18683 /tmp/tmux-1000/default
unix 3 [ ] STREAM CONNECTED 12146 /tmp/tmux-1000/default
unix 3 [ ] STREAM CONNECTED 22647 /tmp/tmux-1000/default
Run Code Online (Sandbox Code Playgroud)
因为我只看到 的路径,所以/tmp/tmux-1000/default
我希望看到它的大小增加,但它的大小始终为 0
[user@server00 ~]$ ls -l /tmp/tmux-1000/default
srwxrwx---. 1 user user 0 Feb 9 10:45 /tmp/tmux-1000/default
Run Code Online (Sandbox Code Playgroud)
如何查看套接字上待处理的数据,以及如何知道套接字是否变得拥塞?
恐怕 slm 的答案(当前标记为正确)在许多方面都是不正确的。
首先,OP 询问是否有一种方法可以从外部判断进程是否有 AF_UNIX 套接字上待处理的数据。slm的答案需要修改流程本身。一般来说,netstat 在外部检查您无法控制其行为的进程时很有用。了解进程是否有未读数据很有用,这可以表明该进程没有通过读取正确为其套接字提供服务(即可能有错误,或配置错误,或线程已死亡)。
其次,slm 表明即使在进程内也无法执行此操作,除非读取套接字直到它为空。也错了。进程可以使用SIOCINQ/FIONREAD
ioctl 来检测套接字中待处理的数据量,而无需读取它(我更喜欢FIONREAD
,因为它在更多上下文中意味着相同的事情,因此比SIOCINQ
特定于套接字的 更普遍地被识别)。请参阅 unix(7) 手册页。
最后,在 Linux 上,实际上有一种方法可以通过使用程序ss
而不是netstat
. ss -ax
会成功的。这有点像netstat
类固醇。请参阅 ss(8) 手册页。
归档时间: |
|
查看次数: |
3840 次 |
最近记录: |