如何在 centos 6.5 上阻止 cslisnter?

如何在 centos 6.5 上阻止 cslisnter?

我有一台 centos 6.5 机器,在端口 9000 上运行 java 服务器套接字。这一切一直运行良好,突然当我尝试使用此命令 java myService 启动它时,似乎什么都不起作用。以下是我尝试查找它无法运行的原因的一些命令。

# netstat -tpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 *:sunrpc                    *:*                         LISTEN      1762/rpcbind
tcp        0      0 *:ssh                       *:*                         LISTEN      7105/sshd
tcp        0      0 localhost:ipp               *:*                         LISTEN      1911/cupsd
tcp        0      0 localhost:smtp              *:*                         LISTEN      2128/master
tcp        0      0 *:41002                     *:*                         LISTEN      1883/rpc.statd
tcp        0      0 *:sunrpc                    *:*                         LISTEN      1762/rpcbind
tcp        0      0 *:http                      *:*                         LISTEN      5914/httpd
tcp        0      0 *:ssh                       *:*                         LISTEN      7105/sshd
tcp        0      0 localhost:ipp               *:*                         LISTEN      1911/cupsd
tcp        0      0 localhost:smtp              *:*                         LISTEN      2128/master
tcp        0      0 *:33914                     *:*                         LISTEN      1883/rpc.statd
tcp        0      0 *:15003                     *:*                         LISTEN      4695/java

我还运行此命令来查找以下结果。

$ grep -e 9000 -e 9700 -e 9900 /etc/services
cslistener      9000/tcp                        # CSlistener
cslistener      9000/udp                        # CSlistener
board-roar      9700/tcp                        # Board M.I.T. Service
board-roar      9700/udp                        # Board M.I.T. Service
iua             9900/tcp                        # IUA
iua             9900/udp                        # IUA
iua             9900/sctp                       # IUA

令人困惑的是,虽然它一直运行良好,但当我启动原始服务时,却突然看不到它在端口 9000 上监听?这可能是什么问题?

答案1

在Linux/Unix下,通常一次只有一个应用程序可以访问TCP端口。

如果您有程序在监听端口 9000,然后尝试在该端口上运行其他程序,第二个应用程序将拒绝启动。

对于您来说,您首先需要确定正在监听的应用程序是什么。

但是,在我开始列出命令之前,您必须以 root 用户或具有系统管理员权限的用户身份运行所有这些命令,如果不这样做,那么您将只能看到允许运行用户看到的输出。

lsof命令可用于获取机器上打开的所有端口的列表,以及打开这些端口的进程的名称。

在我的情况下输入

lsof -i -n -P

给出以下输出

postgres  16507 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  16507 postgres    9u  IPv4 2626399      0t0  TCP 127.0.0.1:5432->127.0.0.1:43769 (ESTABLISHED)
postgres  16508 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  16508 postgres    9u  IPv4 2631818      0t0  TCP 127.0.0.1:5432->127.0.0.1:43770 (ESTABLISHED)
postgres  16509 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  16509 postgres    9u  IPv4 2631575      0t0  TCP 127.0.0.1:5432->127.0.0.1:43771 (ESTABLISHED)
postgres  16510 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  16510 postgres    9u  IPv4 2631576      0t0  TCP 127.0.0.1:5432->127.0.0.1:43772 (ESTABLISHED)
postgres  16511 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  16511 postgres    9u  IPv4 2631825      0t0  TCP 127.0.0.1:5432->127.0.0.1:43773 (ESTABLISHED)
postgres  16512 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  16512 postgres    9u  IPv4 2631826      0t0  TCP 127.0.0.1:5432->127.0.0.1:43774 (ESTABLISHED)
cleanup   16513  postfix   15u  IPv4 2626405      0t0  TCP 127.0.0.1:43775->127.0.0.1:5432 (ESTABLISHED)
cleanup   16513  postfix   16u  IPv4 2631596      0t0  TCP 127.0.0.1:43776->127.0.0.1:5432 (ESTABLISHED)
postgres  16514 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  16514 postgres    9u  IPv4 2631595      0t0  TCP 127.0.0.1:5432->127.0.0.1:43775 (ESTABLISHED)
postgres  16515 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  16515 postgres    9u  IPv4 2626409      0t0  TCP 127.0.0.1:5432->127.0.0.1:43776 (ESTABLISHED)
postgres  18500 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  18500 postgres    9u  IPv4 2451534      0t0  TCP 127.0.0.1:5432->127.0.0.1:36938 (ESTABLISHED)
postgres  18689 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  18689 postgres    9u  IPv4 2452045      0t0  TCP 127.0.0.1:5432->127.0.0.1:36981 (ESTABLISHED)
postgres  22048 postgres    8u  IPv4   10293      0t0  UDP 127.0.0.1:38068->127.0.0.1:38068
postgres  22048 postgres    9u  IPv4 2472075      0t0  TCP 127.0.0.1:5432->127.0.0.1:37727 (ESTABLISHED)
root@poweredge2:/proc#

出于显而易见的原因,我净化了一些输出

如您所见,在远列中,有许多行包含“127.0.0.1:00000”,其中 00000 是端口号。

如果对此应用 grep,那么您应该能够过滤掉使用端口 9000 的应用程序,例如:

在此处输入图片描述

lsof -i -n -P | grep 5432

我在测试的系统上的端口 9000 上没有运行任何程序,因此从图片中可以看到我使用了端口 5432(我碰巧知道该端口上有一个 postgres 实例正在运行)

一旦您获得了正在监听相关端口的可疑应用程序列表,如果您查看前两列,您将看到应用程序名称和进程 ID。

例如,在上面的图片中,最底下的 Postgress 服务正在使用 pid = 22048

如果我当时使用

kill 22048

然后操作系统将终止该进程,并释放其正在监听的端口。

警告

毋庸置疑,在实时运行的系统中随意终止进程既危险又不负责任。请确保您有终止这些进程的权限,并且 100% 确定您已识别正确的程序。

如果你在没有权限的系统上执行此操作,你很可能会陷入一大堆麻烦,故事的主角是:

按下回车键前请三思

或者,如果您无法终止监听端口 9000 的进程,那么您应该尝试重新配置您想要运行的服务,以监听不同的端口。

相关内容