Android 检查自己进程持有的FD

Android 检查自己进程持有的FD

工作中遇到一个问题,设备节点之前打开,但是后续打不开,只能杀死app才能继续打开。
一度怀疑是close没有生效,导致进程还是持有fd,所以再打开不允许了。
检查进程持有FD的方法。本代码只能检查自身的,不能检查其他进程的。这个是debug用的代码,实际使用,请自己修改。

	  private void testFileOpen() {
        try {
            Process process = Runtime.getRuntime().exec("ls -al " + "/proc/" + Os.getpid() + "/fd");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String s = bufferedReader.readLine();
            while (s != null) {
                Log.e("ricardo", s + "*****");
                s = bufferedReader.readLine();
            }
            bufferedReader.close();
            bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            s = bufferedReader.readLine();
            while (s != null) {
                Log.e("ricardo", s + "*****");
                s = bufferedReader.readLine();
            }
            bufferedReader.close();
            process.destroy();
        } catch (IOException e) {
            e.printStackTrace();
        }
       /* File file = new File("/proc/" + Os.getpid() + "/fd");
        if (file.exists()) {
            boolean f = file.canRead();
            Log.e("ricarfo", f + "---");
            if (f) {
                File[] files = file.listFiles();
                if (files != null) {
                    for (File file1 : files) {
                        Log.e("ricardo", "proc:" + file1.getAbsoluteFile());
                    }
                }
            }
        }*/
    }

改成runtime ls的原因,这些文件都是lk过去的,原名称都是:0,1。。这种数字编号,后面的file list没找到好方法。
实际结果类似:

lrwx------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 0 -> /dev/null
lrwx------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 1 -> /dev/null
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 10 -> /apex/com.android.art/javalib/apache-xml.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 11 -> /system/framework/framework.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 12 -> /system/framework/framework-graphics.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 13 -> /system/framework/ext.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 14 -> /system/framework/telephony-common.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 15 -> /system/framework/voip-common.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 16 -> /system/framework/ims-common.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 17 -> /apex/com.android.i18n/javalib/core-icu4j.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 18 -> /system/framework/mediatek-telephony-base.jar
lr-x------ 1 u0_a105 u0_a105 64 2022-02-28 22:07 19 -> /system/framework/mediatek-telephony-common.jar
lr-x------ 1 u0_a109 u0_a109 64 2022-02-28 22:08 65 -> /data/app/~~15-8Ne_j2O4FkyERUNNS1w==/com.sunmi.testhttp-tzrHTYs-YZGNyoismezr9A==/base.apk 

顺便里面可以看到,打开了app的真实apk

另外:最后发现问题不是节点没释放,是因为我注册的广播没有反注册,导致打开了多次,所以我真实想要的打不开节点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值