当我想查看应用程序的进程 ID 时,我会这样做ps -aux | grep <application>
。例如,当我这样做时,ps -aux | grep ssh
我会看到 SSH 的进程 ID。
但是当我ps -aux | grep tcp
这样做时,即使我正在积极使用互联网,它也不会输出任何内容。
如何查看 TCP 的进程 ID?
答案1
TCP 不是一个进程,而是内核内部的一个堆栈或子系统。它没有“进程 ID”,因此,尽管内核线程作为其操作的一部分进行工作可能会这样做。执行 TCP 堆栈工作所需的工作分布在多个 kthread、用户空间进程的内核堆栈和其他地方。
要查看您机器上的 kworkers,例如:
% pgrep -af kworker | head
24 kworker/1:0H-events_highpri
30 kworker/2:0H-events_highpri
36 kworker/3:0H-events_highpri
42 kworker/4:0H-kblockd
48 kworker/5:0H-events_highpri
54 kworker/6:0H-events_highpri
60 kworker/7:0H-events_highpri
120 kworker/1:1H-events_highpri
121 kworker/0:1H-kblockd
151 kworker/7:1H-events_highpri
其中一些致力于特定类型的工作,而另一些则涉及更广泛的范围。由于 TCP 堆栈不仅涉及网络,还涉及 CPU 调度程序、内存和其他资源,因此内核的许多不同部分最终可能会抽象地参与处理 TCP 数据包的前进过程。
答案2
我假设您已经查看ps -aux | grep ssh
并看到了 SSH 端口(TCP 端口 22)上的系统,并认为这是匹配的。它实际上与名为 ssh 的程序名称匹配。
接下来的事情实际上取决于您想要做什么。要查看所有使用 TCP 的进程,您需要的工具是ss
。
ss -atnp
可能就是你所追求的。这将显示所有TCP数字a
套接字以及打开它的进程。您需要成为 root 用户或使用 sudo 才能查看不属于您的进程,例如 Web 服务器或 ssh 服务器。t
n
p
此命令回答诸如“谁正在连接到远程站点 X”或“谁打开了端口 1234”之类的问题。