Linux:查找进程使用的所有文件描述符
时间:2020-01-09 10:41:31 来源:igfitidea点击:
如何找到诸如httpd(Apache Web服务器)或mysqld(MySQL数据库服务器)之类的进程使用的所有文件描述符?
您可以使用/proc文件系统或lsof命令来查找进程使用的所有文件描述符。
/proc文件系统示例
首先,使用ps命令找出进程ID,执行:
# ps aux | grep processName # ps aux | grep mysqld
输出示例:
root 3632 0.0 0.0 65944 1296 ? S Jun05 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --user=mysql mysql 3679 9.0 8.9 1393476 733756 ? Sl Jun05 3448:12 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --socket=/var/lib/mysql/mysql.sock root 44723 0.0 0.0 61188 820 pts/0 S+ 17:48 0:00 grep mysqld
您还可以按以下方式使用pidof命令来查找命名程序的进程ID(PID):
# pidof processName # pidof mysqld
输出示例:
3679
记下PID 3679。
/proc/$pid/fd目录示例
执行以下命令:
# ls /proc/3679/fd # ls -l /proc/3679/fd
lsof命令示例
执行命令,如下所示:
# lsof -a -p {PID-HERE} # lsof -a -p 3679
要查看有关使用的文件描述符的统计信息,请执行:
# cat /proc/3679/net/sockstat
输出示例:
sockets: used 183 TCP: inuse 5 orphan 0 tw 0 alloc 9 mem 2 UDP: inuse 9 mem 1 UDPLITE: inuse 0 RAW: inuse 0 FRAG: inuse 0 memory 0
请注意,在较旧的内核(例如RHEL 5或Suse 9或Debian 4或5附带的内核)上,请使用名为/proc/net/sockstat的系统野生统计文件描述符文件:
# cat /proc/net/sockstat