开源中文网

您的位置: 首页 > IBM Aix > 正文

在AIX系统下如何知道在给定端口侦听的进程

来源:  作者:

在AIX系统下如何知道在给定端口侦听的进程?



一、前言



在使用AIX操作系统时,用netstat命令能很容易看到系统内有哪些端口被占用了,哪些端口有进程在侦听。但是,要想知道在给定端口上侦听的进程是什么,恐怕就不那么容易了。IBM AIX 5L上的rmsock命令能输出侦听在网络地址的进程PID。本文详细介绍了用Shell输出在端口侦听的进程信息的实现原理和脚本封装方法。对于急于看到效果的读者可以直接阅读第四小节,先了解该脚本的用法,有兴趣时回过头再阅读第二小节和第三小节,进一步了解实现原理和如何设计脚本。



二、实现原理



它的实现原理是:用netstat命令查询在给定端口侦听的网络地址,调用rmsock命令显示在网络地址侦听的进程PID,调用ps命令显示活动进程的完整信息。

它的核心是rmsock命令,rmsock命令是IBM AIX 5L系统自带的命令。该命令的功能是删除网络地址对应的套接字,假如使用套接字的进程已经退出或者被杀死,该套接字将被从系统内删除,网络地址可以重新使用。假如使用套接字的进程仍然存在,该命令会提示套接字被进程使用,并显示进程号PID。

下面以telnet端口23为例,演示一下手工方式调用命令获得进程PID的过程:

* 看网络地址

netstat -Aan | grep *.23

执行上述命令后,系统输出如下:

f100060003652398 tcp 0 0 *.23 *.* LISTEN

*.23表示在端口23侦听的网络地址,*代表该主机的任意IP地址。

f100060003652398 是该套接字的(16进制表示的)系统内核地址。

* 看进程PID

rmsock f100060003652398 tcpcb

执行上述命令后,系统输出如下:

The socket 0x3652008 is being held by proccess 332008 (inetd).

显然,占用网络地址的进程PID是 332008,进程执行映像是inetd。

* 看进程的详细信息

ps -efl | grep 332008

执行上述命令后,系统输出如下:

240001 A root 332008 393220 0 60 20 40214400 448 12月21 - 0:01 /usr/sbin/inetd

其中第4列是进程PID,最后一列是进程执行映像的完整路径。



至此,进程的完整信息都被暴露出来,我们的目标基本达到了。不过用了三条命令才达到目标,在日常系统管理过程中显得相当繁琐,作者使用Shell脚本把三条命令整合到一起,方便大家使用。 

Tags:系统 如何 知道
关于开源中文网 - 联系我们 - 广告服务 - 网站地图 - 版权声明