为什么/ proc / PID / status中进程的名称与package name或ps命令不匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么/ proc / PID / status中进程的名称与package name或ps命令不匹配相关的知识,希望对你有一定的参考价值。
我编写的本机应用程序使用/proc/PID/status
名称变量。但是,状态文件中的name变量似乎不完整。例如,在测试时我打开android计算器并从PS查找PID并转到相应的/proc/PID
文件夹。然后我抓住状态文件来查看
Name: oid.calculator
PS命令显示com.android.calculator
。 packages.xml
显示com.android.calculator
。我在其他一些手机上测试过(运行相同操作系统版本的Razr Maxx运行4.0.4,谷歌Nexus),并注意到类似的行为。
这取决于Linux内核功能:进程有两个不同的名称。
- 其中一个名称是可执行文件路径的最后一个组件,例如
native_executable
如果您的申请位于/data/apps/com.example.hello/native_executable
。这是出现在Name
的/proc/PID/status
字段中的名称。内核将其截断为15个字符,因此在这种情况下它包含native_executab
。 - 另一个名称由调用应用程序作为其命令行参数#0的程序传递(C中的
argv[0]
,Java中的args[0]
)。这是/proc/PID/cmdline
开头出现的名称,ps
显示的名称。 - 可执行文件的路径也是符号链接
/proc/PID/exe
的目标。
按照惯例,当程序启动另一个程序时,它应该使用可执行文件的名称作为命令行参数0,但是它可以选择不这样做。 Name
的/proc/PID/status
字段始终设置为内核的可执行文件的(截断的)名称。
这是一个通用的Linux功能 - 另请参阅Can I use standard tools to get the full name of a process, when its name has embedded spaces?上的Ask Ubuntu。
应用程序本身可以在之后更改两个名称(尽管存在长度限制)。 Dalvik使用此功能来区分应用程序:所有应用程序源自相同的本机可执行文件/sytem/bin/app_process
; VM不是将它们全部称为app_process
,而是将两个名称都更改为应用程序包名称。 /proc/PID/status
中的名称限制为15个字符,这就是它被截断的原因。您可以从/proc/PID/cmdline
获取更长的名称(读取到第一个空字节)。
以上是关于为什么/ proc / PID / status中进程的名称与package name或ps命令不匹配的主要内容,如果未能解决你的问题,请参考以下文章
Linux下进程信息/proc/pid/status文件深入分析
访问 `proc` 文件系统以从系统应用程序中读取 `/proc/[pid]/some-file`