一天不写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
嗯,各进程的关系一目了然。