我们可以在同一台机器上彼此找出服务器/守护进程和客户端进程吗?

提姆

在Ubuntu上,我经常在本地运行一些服务器/守护程序和一些客户端。服务器/守护程序和客户端可以是任意程序(emacs守护程序和客户端,Screen守护程序和客户端,有人编写的服务器和客户端),并且假设您的命名方式不正确。

  • 仅给定客户端进程的PID,是否有某种方法可以找到服务器/守护程序的PID?

  • 仅给定服务器/守护程序的PID,是否有某种方法可以找到所有客户端的PID?

如果我要问的是不可能的,那么您需要什么额外的最低限度的信息来实现尽可能通用的目标?

谢谢。

multithr3at3d

大多数形式的IPC(进程间通信)都可以使用一些实用程序进行跟踪。套接字(网络套接字和UNIX套接字)非常常用,可以使用一些常用工具进行跟踪。让我们来看一个使用的示例netstat -ap

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:5000          0.0.0.0:*               LISTEN      810/python3         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      858/nginx: master process 
<snip>
tcp        0      0 127.0.0.1:46858         127.0.0.1:5000          ESTABLISHED 860/nginx: worker process
<snip> 
tcp        0      0 127.0.0.1:5000          127.0.0.1:46858         ESTABLISHED 810/python3         

具有PID 860和810的两个进程正在通信。810在这种情况下是服务器。我们可以通过直观地解析netstat输出或grep为此来看到它。

另外,假设我们要查看客户端正在使用PID 810进行通信,则可以执行以下操作lsof -p 810

COMMAND PID USER   FD      TYPE             DEVICE  SIZE/OFF    NODE NAME
<snip>
python3 810 user    8u     IPv4              35702       0t0     TCP 127.0.0.1:5000 (LISTEN)
python3 810 user   10u     IPv4            4682120       0t0     TCP 127.0.0.1:5000->127.0.0.1:46858 (ESTABLISHED)

在这里,我们可以确定与进程通信的端点,而不是PID。为了识别其他PID,我们可以执行以下操作lsof -i :46858

COMMAND PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python3 810  user   10u  IPv4 4682120      0t0  TCP localhost:5000->localhost:46858 (ESTABLISHED)
nginx   860 nginx   18u  IPv4 4681280      0t0  TCP localhost:46858->localhost:5000 (ESTABLISHED)

netstat输出中更下方的是UNIX套接字:

Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name     Path
<snip>
unix  2      [ ACC ]     STREAM     LISTENING     21936    1/systemd            /run/dbus/system_bus_socket
<snip>
unix  3      [ ]         STREAM     CONNECTED     28918    648/dbus-daemon      /run/dbus/system_bus_socket

我们可以在看到这两个进程都在使用UNIX套接字/run/dbus/system_bus_socket因此,如果您了解其中一个流程,那么您应该能够确定另一端。lsof可以在这种情况下再次使用,也可以指向套接字文件,例如lsof /run/dbus/system_bus_socket

我意识到这有点令人费解并且有点复杂,但是我希望它能有所帮助。请注意,也可以使用来跟踪使用某种文件/句柄(例如管道)的其他类型的IPC lsof

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在一台机器上模拟的服务器和客户端网络应用

RPC over TCP 与同一台机器上的多个客户端

Python:套接字-从同一台PC运行服务器和客户端

HBase区域服务器和Hadoop数据节点是否应该在同一台机器上?

同一台机器上的多个ssh服务器和要重定向的代理取决于域

1password 和 lastpass 可以在同一台机器和浏览器上共存吗?

一台PC上的ZeroMQ服务器和客户端

我可以在同一台机器上同时运行多个 ansible 实例吗?

我们可以使用Flutter / Dart获得一个应用共享服务器(API)和客户端代码(iOS / Android / Web)吗?

一台机器上可以运行多个http服务器?

Oracle Coherence的新增功能,试图将数据放入缓存中,两台机器一台服务器一个客户端

在一台机器上使用SSL的Tomcat和Apache Web服务器

TCP客户端可以使用同一端口连接另一台服务器吗?

是否可以在同一台机器上启动多个docker守护程序

尝试将文件客户端传输到同一台PC上的服务器时遇到异常

当服务器和客户端在同一台计算机上时收听广播

是否可以在同一台计算机上运行套接字服务器和套接字客户端?

我可以在同一程序中编写服务器和客户端代码并运行它们吗?

如何在一台机器上设置多个Web客户端

是否可以使用InProcessChannel在同一进程中使用Java客户端调用c ++服务器?

关于服务器,何时应该将进程移至另一台服务器而不是同一台服务器上?

我可以在一台服务器上运行apache和glassfish吗?

我们可以从任何其他客户端(jboss客户端)调用weblogic服务器上托管的EJB(Enterprise Java Bean)吗?

每个客户端(在一台服务器上)的登录页面不同

PhpStorm v10 可以和 v2019.3 安装在同一台机器上吗

多个客户端和一台服务器 Blazor 资产冲突

UDP中的一台服务器和多客户端聊天框

我可以在同一台机器上混合使用 1GB 和 2GB 的内存条吗?

debian和ubuntu在同一台机器上