Android进程分析

一天不写Python程序就感觉缺了点什么,写了个python程序来分析ps输出的结果,加深下理解


import re
from collections import namedtuple
process = namedtuple('process', 'user pid ppid vsize rss wchan pc unknown name')

prog = re.compile(r'([\S]+)[\s]+([\S]+)[\s]+([\S]+)[\s]+([\S]+)[\s]+([\S]+)[\s]+([\S]+)[\s]+([\S]+)[\s]+([\S]+)[\s]+([\S]+)')

with open('process.txt','rb') as f:
    lines = f.readlines()
parent_info = {}
process_info = {}
for line in lines:
    result = prog.search(line)
    if result:
        result = result.groups()
        result = list(result)
        result[1] = int(result[1])
        result[2] = int(result[2])
        process_info[result[1]] = result
#        print result
        if result[2] in parent_info:
            parent_info[result[2]].append(line)
        else:
            parent_info[result[2]] = [line]
#        p = process(*result)
for pid in parent_info:
    processes = parent_info[pid]
    if 0 == pid:
        print '\nparent process: kernel'
    else:
        print '\nparent process:',process_info[pid][8]
        
    for p in processes:
        print '\t',p,
#print parent_info
 


将ps的输出保存为process.txt,然后再执行脚本,会得到如下的输出:


parent process: kernel
	root      1     0     852    624   c00e3224 00032f58 S /init
	root      2     0     0      0     c007c370 00000000 S kthreadd

parent process: /init
	root      1650  1     632    208   c00e3224 00032f58 S /sbin/ueventd
	root      2488  1     468    248   c00404d4 00030250 S /system/bin/sh
	system    2489  1     924    356   c03a36ac 400ff108 S /system/bin/servicemanager
	root      2490  1     4188   964   ffffffff 401538b4 S /system/bin/vold
	root      2492  1     9764   1204  ffffffff ffff0520 S /system/bin/netd
	root      2493  1     972    412   c04b88f8 40070bb8 S /system/bin/debuggerd
	system    2494  1     66480  5988  ffffffff 4010a108 S /system/bin/surfaceflinger
	root      2495  1     651812 35452 ffffffff 4018322c S zygote
	drm       2496  1     11828  4620  ffffffff 40224108 S /system/bin/drmserver
	media     2497  1     95384  10148 ffffffff 401ba108 S /system/bin/mediaserver
	install   2498  1     940    480   c0564720 40177e98 S /system/bin/installd
	keystore  2500  1     1868   904   c04b88f8 40190bb8 S /system/bin/keystore
	root      2501  1     896    360   c04b88f8 40174bb8 S /system/bin/smbd
	root      2503  1     1824   692   c00e3224 400ec22c S /system/bin/pppoe_wrapper
	media_rw  2507  1     2324   392   ffffffff 40114e98 S /system/bin/sdcard
	shell     2510  1     1424   188   ffffffff 00015f4c S /sbin/adbd
	system    4250  1     924    384   c0080a94 400988b4 S /system/bin/usbtestpm

parent process: kthreadd
	root      3     2     0      0     c0067b7c 00000000 S ksoftirqd/0
	root      5     2     0      0     c0078174 00000000 S kworker/u:0
	root      6     2     0      0     c009e79c 00000000 S migration/0
	root      7     2     0      0     c009e79c 00000000 S migration/1
	root      8     2     0      0     c0078174 00000000 S kworker/1:0
	root      9     2     0      0     c0067b7c 00000000 S ksoftirqd/1
	root      10    2     0      0     c00784bc 00000000 S khelper
	root      11    2     0      0     c0078174 00000000 S kworker/u:1
	root      20    2     0      0     c00784bc 00000000 S suspend
	root      83    2     0      0     c006e134 00000000 D kthread_hdmi
	root      84    2     0      0     c006e134 00000000 D kthread_hdmi_mo
	root      526   2     0      0     c00b9924 00000000 S sync_supers
	root      528   2     0      0     c00ba5b4 00000000 S bdi-default
	root      529   2     0      0     c00784bc 00000000 S kintegrityd
	root      531   2     0      0     c00784bc 00000000 S kblockd
	root      541   2     0      0     c02fafc8 00000000 S khubd
	root      560   2     0      0     c0078174 00000000 S kworker/1:1
	root      561   2     0      0     c00784bc 00000000 S cfg80211
	root      649   2     0      0     c00b487c 00000000 S kswapd0
	root      704   2     0      0     c01066dc 00000000 S fsnotify_mark
	root      730   2     0      0     c00784bc 00000000 S crypto
	root      1262  2     0      0     c0291d80 00000000 S khvcd
	root      1329  2     0      0     c00784bc 00000000 S kpsmoused
	root      1330  2     0      0     c0078174 00000000 S kworker/0:1
	root      1378  2     0      0     c00784bc 00000000 S binder
	root      1389  2     0      0     c0081420 00000000 D ge2d_monitor
	root      1401  2     0      0     c0081370 00000000 S kthread_di
	root      1406  2     0      0     c00784bc 00000000 S dwc_otg
	root      1410  2     0      0     c00784bc 00000000 S dwc_otg
	root      1420  2     0      0     c02c1588 00000000 S mtdblock0
	root      1425  2     0      0     c02c1588 00000000 S mtdblock1
	root      1430  2     0      0     c02c1588 00000000 S mtdblock2
	root      1435  2     0      0     c02c1588 00000000 S mtdblock3
	root      1440  2     0      0     c02c1588 00000000 S mtdblock4
	root      1445  2     0      0     c02c1588 00000000 S mtdblock5
	root      1450  2     0      0     c02c1588 00000000 S mtdblock6
	root      1455  2     0      0     c02c1588 00000000 S mtdblock7
	root      1460  2     0      0     c02c1588 00000000 S system4
	root      1465  2     0      0     c02c1588 00000000 S cache5
	root      1469  2     0      0     c02c1588 00000000 S backup6
	root      1474  2     0      0     c02c1588 00000000 S data7
	root      1528  2     0      0     c02c1588 00000000 S mtdblock8
	root      1533  2     0      0     c02c1588 00000000 S mtdblock9
	root      1537  2     0      0     c00784bc 00000000 S kcardd
	root      1543  2     0      0     c006e134 00000000 D card_read_monit
	root      1551  2     0      0     c00784bc 00000000 S rtc
	root      1645  2     0      0     c00784bc 00000000 S goodix_wq
	root      1647  2     0      0     c0081370 00000000 S kthread_cec
	root      2477  2     0      0     c042e980 00000000 S sd_queue
	root      2481  2     0      0     c017f5b8 00000000 S jbd2/system-8
	root      2482  2     0      0     c00784bc 00000000 S ext4-dio-unwrit
	root      2483  2     0      0     c017f5b8 00000000 S jbd2/data-8
	root      2484  2     0      0     c00784bc 00000000 S ext4-dio-unwrit
	root      2486  2     0      0     c017f5b8 00000000 S jbd2/cache-8
	root      2487  2     0      0     c00784bc 00000000 S ext4-dio-unwrit
	root      4430  2     0      0     c0078174 00000000 S kworker/0:2
	root      4536  2     0      0     c00f4ba4 00000000 S flush-250:28

parent process: /system/bin/sh
	root      4538  2488  1188   448   00000000 401dee98 R ps 
parent process: zygote
	system    3654  2495  787572 37768 ffffffff 40183108 S system_server
	u0_a39    3921  2495  684148 49884 ffffffff 40184004 S com.android.systemui
	radio     3999  2495  671712 23828 ffffffff 40184004 S com.android.phone
	system    4015  2495  660172 18844 ffffffff 40184004 S com.android.service.remotecontrol
	system    4024  2495  668508 21388 ffffffff 40184004 S com.android.settings
	u0_a16    4053  2495  660144 18884 ffffffff 40184004 S com.android.location.fused
	u0_a2     4086  2495  670604 24516 ffffffff 40184004 S android.process.acore
	u0_a13    4098  2495  665108 24360 ffffffff 40184004 S android.process.media
	u0_a18    4150  2495  662836 21648 ffffffff 40184004 S com.android.gallery3d
	u0_a43    4164  2495  660116 18532 ffffffff 40184004 S com.android.smspush
	u0_a26    4237  2495  661784 20144 ffffffff 40184004 S com.android.music
	u0_a8     4298  2495  660812 21340 ffffffff 40184004 S com.android.providers.calendar
	u0_a12    4315  2495  663492 21176 ffffffff 40184004 S com.android.deskclock
	u0_a7     4372  2495  667672 21500 ffffffff 40184004 S com.android.calendar
	u0_a34    4413  2495  661148 19432 ffffffff 40184004 S com.android.provision



嗯,各进程的关系一目了然。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android ION(IPC over NETwork)是一种使用Android的Binder IPC通信机制进行进程间通信的开源库。在进行内存分析时,我们可以通过以下几个步骤来分析Android ION的内存使用情况。 首先,我们可以使用内存分析工具,如Android Studio提供的Memory Profiler,通过单击“Start Recording”按钮开始记录内存使用情况。然后,我们可以执行包含Android ION代码的操作,例如分配和释放ION内存缓冲区。 接下来,我们可以使用Memory Profiler工具来分析我们的应用程序在执行这些操作时所使用的内存。工具会提供一个内存使用情况的图表,我们可以根据这个图表来判断再分配和释放ION内存缓冲区时是否存在内存泄漏或者过度内存使用的情况。 此外,我们还可以使用Android的Debug.MemoryInfo API来获取有关Android ION内存使用情况的更详细信息。通过使用MemoryInfo对象的getMemoryStats()方法,我们可以获取关于Android ION的内存使用情况的一些统计数据,例如分配的内存缓冲区的数量、总大小等。 最后,在进行完内存分析后,我们可以根据分析结果来优化我们的应用程序。例如,我们可以检查我们的代码是否正确地释放了ION内存缓冲区,并确保我们只分配了我们实际需要的内存大小。我们还可以考虑使用更有效的算法来减少对ION内存缓冲区的需求,从而降低内存使用量。 总结来说,通过使用内存分析工具和Android的Debug.MemoryInfo API,我们可以对Android ION的内存使用情况进行分析和优化,以确保我们的应用程序能够有效地使用ION内存缓冲区,并避免内存泄漏和过度内存使用的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值