fd泄露查询

前几天遇到 fd 泄露问题,这里记录下 fd 查询方法

fd 其实是系统中的文件目录,存在 /proc/[pid]/fd,包含进程打开文件的情况。

打印 fd:

root@android:/ # adb shell ls -l /proc/9580/fd                                
lrwx------ u0_a96   u0_a96            2017-05-15 16:41 0 -> /dev/null
lrwx------ u0_a96   u0_a96            2017-05-15 16:41 1 -> /dev/null
lrwx------ u0_a96   u0_a96            2017-05-15 16:41 121 -> socket:[23760]
lrwx------ u0_a96   u0_a96            2017-05-15 16:41 122 -> socket:[23329]
lrwx------ u0_a96   u0_a96            2017-05-15 16:41 130 -> socket:[23936]
lrwx------ u0_a96   u0_a96            2017-05-15 16:41 131 -> socket:[23389]
lrwx------ u0_a96   u0_a96            2017-05-15 16:41 132 -> socket:[24398]
lrwx------ u0_a96   u0_a96            2017-05-15 16:41 133 -> socket:[23937]
......

pid 为 9580 的程序 fd 目录下中的每一项都是一个符号链接,指向打开的文件,数字则代表文件描述符

计算个数:

root@android:/ # adb shell ls -l /proc/9580/fd | wc -l                         
175
写了一个小脚本来打印pid的 fd个数
#!/usr/bin/env python
#!/bin/bash
#!/bin/sh
#coding:utf-8

import os
import sys

if len(sys.argv) == 1:
id = '0'
else:
id = str(sys.argv[1]);

print("pid = " + id)

command = "adb shell ls -l /proc/"+ id +"/fd | wc -l"
print("fd = ")
p = os.system(command)

你可能感兴趣的:(fd泄露查询)