You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找创建特定Unix Socket的进程?

查找创建特定Unix Socket的进程方法

嘿,我来帮你搞定这个问题!首先得澄清一个点:通常来说,创建Unix Socket并对其进行监听的进程就是它的创建者——毕竟要先调用socket()创建套接字,再bind()到目标路径,最后listen()进入监听状态。不过如果你还是想确认,或者遇到了特殊场景,下面这些工具和命令可以帮你精准定位:

1. 用 lsof 精准筛选

你已经试过lsof -nl,那可以进一步指定socket路径来缩小范围:

lsof -Ua /run/user/1000/keyring-.../ssh

参数说明:

  • -U:只显示Unix Socket相关的条目
  • -a:逻辑与,结合后面的路径筛选,只输出关联该socket路径的进程
  • -nl:跳过用户名和主机名解析,速度更快,同时直接显示UID和PID

这个命令会列出所有打开该socket的进程,要是gnome-keyring是创建者,你会在COMMAND列看到它,TYPE列会显示STREAM或DGRAM,STATE列则会标注LISTEN(监听状态)。

2. 用 ss 替代netstat(更强大的工具)

netstat已经慢慢被ss取代了,它对Unix Socket的支持更完善。试试这条命令:

ss -xp | grep /run/user/1000/keyring-.../ssh

参数说明:

  • -x:专门显示Unix Socket
  • -p:显示关联的进程信息(需要root权限,不然可能看不到完整内容)

输出里会直接给出PID和进程名,比如pid=1234(gnome-keyring-daemon),一眼就能看到哪个进程在操控这个socket。

3. 直接检查进程的文件描述符

如果上面的工具没给你足够信息,还可以直接查看gnome-keyring进程的文件描述符,确认它是否持有这个socket:
先拿pidof gnome-keyring-daemon获取它的PID(假设是1234),然后执行:

ls -l /proc/1234/fd | grep ssh

要是能看到指向/run/user/1000/keyring-.../ssh的链接(一般是type=STREAM),那就实锤这个进程打开了该socket,结合监听状态,基本就能确定它就是创建者了。

补个小知识点:为什么netstat没显示?

你说netstat -tulpen找不到这个socket,是因为-t是TCP、-u是UDP,Unix Socket得用-x参数:

netstat -xlpen | grep /run/user/1000/keyring-.../ssh

这样就能看到对应的条目啦。


内容的提问来源于stack exchange,提问作者Ojs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:07:33