Mercurial > hg > toybox
annotate toys/pending/ps.c @ 1396:e0c9c5424864 draft
Isaac Dunham spotted that dhcp was also reimplementing daemon().
author | Rob Landley <rob@landley.net> |
---|---|
date | Sun, 20 Jul 2014 21:34:49 -0500 |
parents | 0d33dd5f537e |
children | 2e59317546ed |
rev | line source |
---|---|
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
1 /* ps.c - Show running process statistics. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
2 * |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
3 * Copyright 2013 Sandeep Sharma <sandeep.jack2756@gmail.com> |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com> |
1290 | 5 * |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
6 * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ps.html |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
7 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
8 USE_PS(NEWTOY(ps, ">0o*T", TOYFLAG_BIN)) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
9 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
10 config PS |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
11 bool "ps" |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
12 default n |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
13 help |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
14 usage: ps [-o COL1,COL2=HEADER] [-T] |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
15 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
16 Show list of processes |
1290 | 17 |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
18 -o COL1,COL2=HEADER Select columns for display |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
19 -T Show threads |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
20 */ |
1290 | 21 |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
22 #define FOR_ps |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
23 #include "toys.h" |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
24 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
25 GLOBALS( |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
26 struct arg_list *llist_o; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
27 unsigned screen_width; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
28 ) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
29 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
30 #define BUFF_SIZE 1024 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
31 struct header_list { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
32 char *name; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
33 char *header; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
34 char *format; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
35 int width; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
36 int position; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
37 struct header_list *next; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
38 }; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
39 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
40 struct header_list *o_list = NULL; //List of Header attributes. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
41 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
42 /* |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
43 * create list of header attributes taking care of -o (-o ooid=MOM..) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
44 * and width of attributes. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
45 */ |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
46 static void list_add(struct header_list **list, struct header_list *data, char *c_data) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
47 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
48 struct header_list *temp = *list, *new = xzalloc(sizeof(struct header_list)); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
49 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
50 new->name = data->name; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
51 if (c_data) new->header = c_data; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
52 else new->header = xstrdup(data->header); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
53 if (c_data && (strlen(c_data) > data->width)) new->width = strlen(c_data); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
54 else new->width = data->width; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
55 new->format = data->format; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
56 new->position = data->position; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
57 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
58 if (temp) { |
1290 | 59 while (temp->next) temp = temp->next; |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
60 temp->next = new; |
1290 | 61 } else *list = new; |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
62 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
63 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
64 //print the default header OR header with -o args |
1290 | 65 static void print_header(struct header_list *hdr, int hdr_len) |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
66 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
67 int i = 0; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
68 char *ptr = NULL, *str, *temp; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
69 struct arg_list *node = TT.llist_o; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
70 |
1290 | 71 // Default pid, user, time, comm |
72 if (!node) { | |
73 list_add(&o_list, hdr+4, 0); | |
74 list_add(&o_list, hdr, 0); | |
75 list_add(&o_list, hdr+11, 0); | |
76 list_add(&o_list, hdr+3, 0); | |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
77 } |
1290 | 78 |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
79 while (node) { |
1290 | 80 char *s = str = xstrdup(node->arg); |
81 | |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
82 i = 0; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
83 while (str) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
84 if ((ptr = strsep(&str, ","))) { //seprate list |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
85 if ((temp = strchr(ptr, '='))) { // Handle ppid = MOM |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
86 *temp = 0; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
87 temp++; |
1290 | 88 while (hdr[i].name) { |
89 // search from default header | |
90 if (!(strcmp(hdr[i].name, ptr))) { | |
91 //handle condition like ppid = M,OM | |
92 if (str) ptr = xmprintf("%s,%s", temp, str); | |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
93 else ptr = xmprintf("%s", temp); |
1290 | 94 list_add(&o_list, &hdr[i], ptr); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
95 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
96 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
97 i++; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
98 } |
1290 | 99 if (!hdr[i].name) perror_exit("Invalid arg for -o option"); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
100 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
101 } else { |
1290 | 102 while (hdr[i].name) { |
103 if (!(strcmp(hdr[i].name, ptr))) { | |
104 list_add(&o_list, &hdr[i], 0); | |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
105 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
106 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
107 i++; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
108 } |
1290 | 109 if (!hdr[i].name) error_exit("bad -o"); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
110 i = 0; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
111 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
112 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
113 } |
1290 | 114 free(s); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
115 node = node->next; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
116 } |
1290 | 117 |
118 for (hdr = o_list; hdr; hdr = hdr->next) | |
119 printf(hdr->format , hdr->width, hdr->header); | |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
120 xputc('\n'); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
121 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
122 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
123 //get uid/gid for processes. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
124 static void get_uid_gid(char *p, char *id_str, unsigned *id) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
125 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
126 FILE *f; |
1290 | 127 |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
128 if(!p) return; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
129 f = xfopen(p, "r"); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
130 while (fgets(toybuf, BUFF_SIZE, f)) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
131 if (!strncmp(toybuf, id_str, strlen(id_str))) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
132 sscanf(toybuf, "%*s %u", id); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
133 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
134 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
135 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
136 fclose(f); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
137 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
138 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
139 //get etime for processes. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
140 void get_etime(unsigned long s_time) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
141 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
142 unsigned long min; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
143 unsigned sec; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
144 struct sysinfo info; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
145 char *temp; |
1290 | 146 |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
147 sysinfo(&info); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
148 min = s_time/sysconf(_SC_CLK_TCK); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
149 min = info.uptime - min; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
150 sec = min % 60; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
151 min = min / 60; |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
152 temp = xmprintf("%3lu:%02u", min,sec); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
153 xprintf("%*.*s",7,7,temp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
154 free(temp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
155 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
156 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
157 //get time attributes for processes. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
158 void get_time(unsigned long s_time, unsigned long u_time) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
159 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
160 unsigned long min; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
161 unsigned sec; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
162 char *temp; |
1290 | 163 |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
164 min = (s_time + u_time)/sysconf(_SC_CLK_TCK); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
165 sec = min % 60; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
166 min = min / 60; |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
167 temp = xmprintf("%3lu:%02u", min,sec); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
168 xprintf("%*.*s",6,6,temp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
169 free(temp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
170 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
171 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
172 /* |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
173 * read command line taking care of in between NUL's |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
174 * in command line |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
175 */ |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
176 static void read_cmdline(int fd, char *cmd_ptr) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
177 { |
1290 | 178 int size = read(fd, cmd_ptr, BUFF_SIZE); //sizeof(cmd_buf) |
179 | |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
180 cmd_ptr[size] = '\0'; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
181 while (--size > 0 && cmd_ptr[size] == '\0'); //reach to last char |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
182 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
183 while (size >= 0) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
184 if ((unsigned char)cmd_ptr[size] < ' ') cmd_ptr[size] = ' '; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
185 size--; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
186 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
187 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
188 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
189 /* |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
190 * get the processes stats and print the stats |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
191 * corresponding to header attributes. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
192 */ |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
193 static void do_ps_line(int pid, int tid) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
194 { |
1290 | 195 char *stat_buff = toybuf + BUFF_SIZE, *cmd_buff = toybuf + (2*BUFF_SIZE); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
196 char state[4] = {0,}; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
197 int tty, tty_major, tty_minor, fd, n, nice, width_counter = 0; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
198 struct stat stats; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
199 struct passwd *pw; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
200 struct group *gr; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
201 char *name, *user, *group, *ruser, *rgroup, *ptr; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
202 long rss; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
203 unsigned long stime, utime, start_time, vsz; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
204 unsigned ppid, ruid, rgid, pgid; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
205 struct header_list *p = o_list; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
206 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
207 sprintf(stat_buff, "/proc/%d", pid); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
208 if(stat(stat_buff, &stats)) return; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
209 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
210 if (tid) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
211 if (snprintf(stat_buff, BUFF_SIZE, "/proc/%d/task/%d/stat", pid, tid) >= BUFF_SIZE) return; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
212 if (snprintf(cmd_buff, BUFF_SIZE, "/proc/%d/task/%d/cmdline", pid, tid) >= BUFF_SIZE) return; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
213 } else { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
214 if (snprintf(stat_buff, BUFF_SIZE, "/proc/%d/stat", pid) >= BUFF_SIZE) return; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
215 if (snprintf(cmd_buff, BUFF_SIZE, "/proc/%d/cmdline", pid) >= BUFF_SIZE) return; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
216 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
217 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
218 fd = xopen(stat_buff, O_RDONLY); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
219 n = readall(fd, stat_buff, BUFF_SIZE); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
220 xclose(fd); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
221 if (n < 0) return; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
222 stat_buff[n] = 0; //Null terminate the buffer. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
223 ptr = strchr(stat_buff, '('); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
224 ptr++; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
225 name = ptr; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
226 ptr = strrchr(stat_buff, ')'); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
227 *ptr = '\0'; //unecessary if? |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
228 name = xmprintf("[%s]", name); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
229 ptr += 2; // goto STATE |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
230 n = sscanf(ptr, "%c %u %u %*u %d %*s %*s %*s %*s %*s %*s " |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
231 "%lu %lu %*s %*s %*s %d %*s %*s %lu %lu %ld", |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
232 &state[0],&ppid, &pgid, &tty, &utime, &stime, |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
233 &nice,&start_time, &vsz,&rss); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
234 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
235 if (tid) pid = tid; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
236 vsz >>= 10; //Convert into KB |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
237 rss = rss * 4; //Express in pages |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
238 tty_major = (tty >> 8) & 0xfff; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
239 tty_minor = (tty & 0xff) | ((tty >> 12) & 0xfff00); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
240 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
241 if (vsz == 0 && state[0] != 'Z') state[1] = 'W'; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
242 else state[1] = ' '; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
243 if (nice < 0 ) state[2] = '<'; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
244 else if (nice) state[2] = 'N'; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
245 else state[2] = ' '; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
246 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
247 if (tid) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
248 if (snprintf(stat_buff, BUFF_SIZE, "/proc/%d/task/%d/status", pid, tid) >= BUFF_SIZE) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
249 goto clean; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
250 } else { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
251 if (snprintf(stat_buff, BUFF_SIZE, "/proc/%d/status", pid) >= BUFF_SIZE) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
252 goto clean; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
253 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
254 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
255 fd = -1; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
256 while (p) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
257 int width; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
258 width = p->width; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
259 width_counter += (width + 1); //how much screen we hv filled, +1, extra space b/w headers |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
260 switch (p->position) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
261 case 0: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
262 pw = getpwuid(stats.st_uid); |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
263 if (!pw) user = xmprintf("%d",(int)stats.st_uid); |
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
264 else user = xmprintf("%s", pw->pw_name); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
265 printf("%-*.*s", width, width, user); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
266 free(user); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
267 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
268 case 1: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
269 gr = getgrgid(stats.st_gid); |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
270 if (!gr) group = xmprintf("%d",(int)stats.st_gid); |
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
271 else group = xmprintf("%s", gr->gr_name); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
272 printf("%-*.*s", width, width, group); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
273 free(group); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
274 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
275 case 2: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
276 name[strlen(name) - 1] = '\0'; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
277 printf("%-*.*s", width,width, name + 1); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
278 name[strlen(name)] = ']'; //Refill it for further process. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
279 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
280 case 3: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
281 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
282 int j = 0; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
283 width_counter -= width; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
284 if(p->next) j = width; //is args is in middle. ( -o pid,args,ppid) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
285 else j = (TT.screen_width - width_counter % TT.screen_width); //how much screen left. |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
286 if (fd == -1) fd = open(cmd_buff, O_RDONLY); //don't want to die |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
287 else xlseek(fd, 0, SEEK_SET); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
288 if (fd < 0) cmd_buff[0] = 0; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
289 else read_cmdline(fd, cmd_buff); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
290 if (cmd_buff[0]) printf("%-*.*s", j, j, cmd_buff); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
291 else printf("%-*.*s", j, j, name); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
292 width_counter += width; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
293 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
294 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
295 case 4: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
296 printf("%*d", width, pid); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
297 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
298 case 5: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
299 printf("%*d", width, ppid); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
300 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
301 case 6: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
302 printf("%*d", width, pgid); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
303 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
304 case 7: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
305 get_etime(start_time); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
306 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
307 case 8: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
308 printf("%*d", width, nice); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
309 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
310 case 9: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
311 get_uid_gid(stat_buff, "Gid:", &rgid); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
312 gr = getgrgid(rgid); |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
313 if (!gr) rgroup = xmprintf("%d",(int)stats.st_gid); |
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
314 else rgroup = xmprintf("%s", gr->gr_name); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
315 printf("%-*.*s", width,width, rgroup); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
316 free(rgroup); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
317 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
318 case 10: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
319 get_uid_gid(stat_buff, "Uid:", &ruid); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
320 pw = getpwuid(ruid); |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
321 if (!pw) ruser = xmprintf("%d",(int)stats.st_uid); |
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
322 else ruser = xmprintf("%s", pw->pw_name); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
323 printf("%-*.*s", width, width, ruser); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
324 free(ruser); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
325 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
326 case 11: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
327 get_time(utime, stime); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
328 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
329 case 12: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
330 if (tty_major) { |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
331 char *temp = xmprintf("%d,%d", tty_major,tty_minor); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
332 printf("%-*s", width, temp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
333 free(temp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
334 } else printf("%-*s", width, "?"); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
335 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
336 case 13: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
337 printf("%*lu", width, vsz); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
338 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
339 case 14: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
340 printf("%-*s", width, state); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
341 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
342 case 15: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
343 printf("%*lu", width, rss); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
344 break; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
345 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
346 p = p->next; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
347 xputc(' '); //space char |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
348 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
349 if (fd >= 0) xclose(fd); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
350 xputc('\n'); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
351 clean: |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
352 free(name); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
353 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
354 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
355 //Do stats for threads (for -T option) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
356 void do_ps_threads(int pid) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
357 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
358 DIR *d; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
359 int tid; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
360 struct dirent *de; |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1020
diff
changeset
|
361 char *tmp = xmprintf("/proc/%d/task",pid); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
362 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
363 if (!(d = opendir(tmp))) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
364 free(tmp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
365 return; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
366 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
367 while ((de = readdir(d))) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
368 if (isdigit(de->d_name[0])) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
369 tid = atoi(de->d_name); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
370 if (tid == pid) continue; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
371 do_ps_line(pid, tid); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
372 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
373 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
374 closedir(d); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
375 free(tmp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
376 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
377 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
378 void ps_main(void) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
379 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
380 DIR *dp; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
381 struct dirent *entry; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
382 int pid; |
1290 | 383 struct header_list def_header[] = { |
384 {"user", "USER", "%-*s ", 8, 0, NULL}, | |
385 {"group", "GROUP", "%-*s ", 8, 1, NULL}, | |
386 {"comm", "COMMAND", "%-*s ",16, 2, NULL}, | |
387 {"args", "COMMAND", "%-*s ",30, 3, NULL}, | |
388 {"pid", "PID", "%*s ", 5, 4, NULL}, | |
389 {"ppid","PPID", "%*s ", 5, 5, NULL}, | |
390 {"pgid", "PGID", "%*s ", 5, 6, NULL}, | |
391 {"etime","ELAPSED", "%*s ", 7, 7, NULL}, | |
392 {"nice", "NI", "%*s ", 5, 8, NULL}, | |
393 {"rgroup","RGROUP", "%-*s ", 8, 9, NULL}, | |
394 {"ruser","RUSER", "%-*s ", 8, 10, NULL}, | |
395 {"time", "TIME", "%*s ", 6, 11, NULL}, | |
396 {"tty", "TT", "%-*s ", 6, 12, NULL}, | |
397 {"vsz","VSZ", "%*s ", 7, 13, NULL}, | |
398 {"stat", "STAT", "%-*s ", 4, 14, NULL}, | |
399 {"rss", "RSS", "%*s ", 4, 15, NULL}, | |
400 {0,0,0,0,0,0} | |
401 }; | |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
402 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
403 TT.screen_width = 80; //default width |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
404 terminal_size(&TT.screen_width, NULL); |
1290 | 405 print_header(def_header, ARRAY_LEN(def_header)); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
406 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
407 if (!(dp = opendir("/proc"))) perror_exit("opendir"); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
408 while ((entry = readdir(dp))) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
409 if (isdigit(*entry->d_name)) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
410 pid = atoi(entry->d_name); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
411 do_ps_line(pid, 0); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
412 if (toys.optflags & FLAG_T) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
413 do_ps_threads(pid); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
414 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
415 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
416 closedir(dp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
417 if (CFG_TOYBOX_FREE) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
418 struct header_list *temp = o_list; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
419 while(temp) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
420 o_list = o_list->next; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
421 free(temp->header); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
422 free(temp); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
423 temp = o_list; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
424 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
425 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
426 } |