我编写的本机应用程序使用/proc/PID/status名称变量.但是,状态文件中的name变量似乎不完整.例如,在测试时我打开Android计算器并从PS查找PID并转到相应的/proc/PID文件夹.然后我抓住状态文件来查看
Name: oid.calculator
Run Code Online (Sandbox Code Playgroud)
PS命令显示com.android.calculator.packages.xml节目com.android.calculator.我在其他一些手机上测试过(运行相同操作系统版本的Razr Maxx运行4.0.4,谷歌Nexus),并注意到类似的行为.
Gil*_*il' 12
这取决于Linux内核功能:进程有两个不同的名称.
native_executable如果您的应用程序位于/data/apps/com.example.hello/native_executable.这是出现在Name字段中的名称/proc/PID/status.内核将其截断为15个字符,因此在这种情况下它包含native_executab.argv[0]在C中,args[0]在Java中).这是出现在开头的名称/proc/PID/cmdline和ps表演./proc/PID/exe.按照惯例,当程序启动另一个程序时,它应该使用可执行文件的名称作为命令行参数0,但是它可以选择不这样做.该Name场/proc/PID/status总是被设置为内核可执行文件的(截)的名字.
这是一个通用的Linux功能 - 另请参阅当我的名称有嵌入空格时,是否可以使用标准工具获取进程的全名?在Ask Ubuntu上.
应用程序本身可以在之后更改两个名称(尽管存在长度限制).Dalvik使用此功能来区分应用程序:所有应用程序都源自相同的本机可执行文件/sytem/bin/app_process; app_processVM 不是让它们都被调用,而是将两个名称都更改为应用程序包名称.名称中/proc/PID/status限制为15个字符,这就是它被截断的原因.您可以从中获取更长的名称/proc/PID/cmdline(读取到第一个空字节).