@@ -27,11 +27,14 @@ void Procrank::cmd_main(void) {
27
27
int flags;
28
28
std::string cppString;
29
29
if (argcnt < 2 ) cmd_usage (pc->curcmd , SYNOPSIS);
30
- while ((c = getopt (argcnt, args, " a " )) != EOF) {
30
+ while ((c = getopt (argcnt, args, " ac " )) != EOF) {
31
31
switch (c) {
32
32
case ' a' :
33
33
parser_process_memory ();
34
34
break ;
35
+ case ' c' :
36
+ parser_process_name ();
37
+ break ;
35
38
default :
36
39
argerrs++;
37
40
break ;
@@ -58,6 +61,8 @@ void Procrank::init_command(){
58
61
" dump process memory information" , /* short description */
59
62
" -a \n "
60
63
" This command dumps the process info. sorted by rss" ,
64
+ " -c \n "
65
+ " This command dumps the process cmdline." ,
61
66
" \n " ,
62
67
" EXAMPLES" ,
63
68
" Display process memory info:" ,
@@ -66,6 +71,12 @@ void Procrank::init_command(){
66
71
" 975 1.97Gb 51.09Mb 13.71Mb 3.54Mb 1.99Mb Binder:975_3" ,
67
72
" 465 1.69Gb 4.53Mb 286.01Kb 36.00Kb 26.01Mb main" ,
68
73
" \n " ,
74
+ " EXAMPLES" ,
75
+ " Display process cmdline:" ,
76
+ " %s> procrank -c" ,
77
+ " PID Comm Cmdline" ,
78
+ " 1 init /system/bin/init" ,
79
+ " \n " ,
69
80
};
70
81
initialize ();
71
82
// print_table();
@@ -147,6 +158,7 @@ std::shared_ptr<procrank> Procrank::parser_vma(ulong& vma_addr, ulong& task_addr
147
158
ulong vm_end = ULONG (vma_struct + field_offset (vm_area_struct, vm_end));
148
159
struct task_context *tc = task_to_context (task_addr);
149
160
if (tc == nullptr ){
161
+ FREEBUF (vma_struct);
150
162
return nullptr ;
151
163
}
152
164
for (ulong vaddr = vm_start; vaddr < vm_end; vaddr+= page_size){
@@ -181,4 +193,25 @@ std::shared_ptr<procrank> Procrank::parser_vma(ulong& vma_addr, ulong& task_addr
181
193
return procrank_ptr;
182
194
}
183
195
196
+ void Procrank::parser_process_name () {
197
+ std::ostringstream oss_hd;
198
+ oss_hd << std::left << std::setw (8 ) << " PID" << " "
199
+ << std::left << std::setw (20 ) << " Comm" << " "
200
+ << std::left << std::setw (10 ) << " Cmdline" << " \n " ;
201
+ for (ulong task_addr: for_each_process ()){
202
+ std::string cmdline;
203
+ struct task_context *tc = task_to_context (task_addr);
204
+ if (!swap_ptr->is_zram_enable ()){
205
+ cmdline = tc->comm ;
206
+ } else {
207
+ cmdline = swap_ptr->read_start_args (task_addr);
208
+ }
209
+ oss_hd << std::left << std::setw (8 ) << tc->pid << " "
210
+ << std::left << std::setw (20 ) << tc->comm << " "
211
+ << std::left << std::setw (10 ) << cmdline << " \n " ;
212
+ }
213
+
214
+ fprintf (fp, " %s \n " , oss_hd.str ().c_str ());
215
+ }
216
+
184
217
#pragma GCC diagnostic pop
0 commit comments