Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在没有lsof的情况下检查打开的文件_Android_Lsof - Fatal编程技术网

Android 如何在没有lsof的情况下检查打开的文件

Android 如何在没有lsof的情况下检查打开的文件,android,lsof,Android,Lsof,在linux中,我使用lsof检查文件是由哪个进程打开的。我有一个安卓设备,但没有lsof命令。是否可以找到打开特定文件的进程 我将使用它来验证MediaPlayer是否持有fd,但它应该关闭。安装busybox,它有一个lsof命令 穷人的lsof是执行死刑 ls -l /proc/[process id]/fd 尽管如此,你还是需要成为root。感谢迈克·琼斯和乔恩为《穷人的lsof》提供的提示。我在busybox(synology nas)上的以下内容中使用了它来列出每个进程下分组的f

在linux中,我使用lsof检查文件是由哪个进程打开的。我有一个安卓设备,但没有lsof命令。是否可以找到打开特定文件的进程


我将使用它来验证MediaPlayer是否持有fd,但它应该关闭。

安装busybox,它有一个lsof命令

穷人的lsof是执行死刑

ls -l  /proc/[process id]/fd

尽管如此,你还是需要成为root。

感谢迈克·琼斯和乔恩为《穷人的lsof》提供的提示。我在busybox(synology nas)上的以下内容中使用了它来列出每个进程下分组的fd目录:

  for p in [0-9]*; do ls -l /proc/$p/fd ;done 

将以上基于/proc的内容与关于在目录树中搜索符号链接的答案结合起来,可以得出以下结论:

# find /proc -ignore_readdir_race -name task -prune -o -path '*/fd/*' -lname '/file/of/interest' -ls -quit
 37023    0 l-wx------   1 username  username        64 Dec 16 09:06 /proc/4140/fd/1 -> /file/of/interest
-ignore\u readdir\u race
避免了由于短流程而导致的错误,
-prune
消除了任务级结果(在第一个流程停止时,这不是严格必要的,因为这些路径仍然会给出相同的答案,但对于避免其他用例中的冗余非常有用,如列出所有结果)

-print
cut
组合,直接提取pid:

# find /proc -ignore_readdir_race -name task -prune -o -path '*/fd/*' -lname '/file/of/interest' -print -quit | cut -d / -f 3
4140
获得pid后,您可以使用ps获取流程详细信息(根据以下答案):


(注意,我在Linux上测试了这个功能,在BSD上应该也可以,但我对Android不是100%确定)

添加了'lsof',commit
8b9b105bc7bf6428591d55462b3e727ba7504b29
。从源代码中取出所需的位,如果目标版本中不存在NDK,则使用NDK进行构建。我使用busy box,但仍然得到“??”我如何获得值?这是一个不同的命令吗?我已经在根访问中,命令运行并给出一个表,我期望值,但我得到的只是问号“?”任何想法thanxI在我的手机上安装了Busybox,但它没有向我提供lsof命令:-(可能这是特定于手机的,但我在小程序列表中找不到它。对于大多数体系结构,这里都有静态链接的busybox二进制文件:
ls-l/proc/*/fd
,可以像默认情况下lsof那样查看所有打开的文件。谢谢。看起来这需要在/proc文件夹中运行-对于p in/proc,可能更一般地说应该是
)/[0-9]*;是否ls-l$p/fd;是否完成?
# ps -p 4140 -o command=
/some/command --with=some args