annotate toys/pending/ps.c @ 1387:a0d26c5e3271 draft

Release notes for 0.4.9.
author Rob Landley <rob@landley.net>
date Mon, 07 Jul 2014 07:32:56 -0500
parents 0d33dd5f537e
children 2e59317546ed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
71 // Default pid, user, time, comm
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
72 if (!node) {
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
73 list_add(&o_list, hdr+4, 0);
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
74 list_add(&o_list, hdr, 0);
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
75 list_add(&o_list, hdr+11, 0);
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
78
1020
fe7725c1819a Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
79 while (node) {
1290
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
80 char *s = str = xstrdup(node->arg);
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
88 while (hdr[i].name) {
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
89 // search from default header
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
90 if (!(strcmp(hdr[i].name, ptr))) {
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
91 //handle condition like ppid = M,OM
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
102 while (hdr[i].name) {
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
103 if (!(strcmp(hdr[i].name, ptr))) {
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
117
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
118 for (hdr = o_list; hdr; hdr = hdr->next)
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
178 int size = read(fd, cmd_ptr, BUFF_SIZE); //sizeof(cmd_buf)
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
383 struct header_list def_header[] = {
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
384 {"user", "USER", "%-*s ", 8, 0, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
385 {"group", "GROUP", "%-*s ", 8, 1, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
386 {"comm", "COMMAND", "%-*s ",16, 2, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
387 {"args", "COMMAND", "%-*s ",30, 3, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
388 {"pid", "PID", "%*s ", 5, 4, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
389 {"ppid","PPID", "%*s ", 5, 5, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
390 {"pgid", "PGID", "%*s ", 5, 6, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
391 {"etime","ELAPSED", "%*s ", 7, 7, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
392 {"nice", "NI", "%*s ", 5, 8, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
393 {"rgroup","RGROUP", "%-*s ", 8, 9, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
394 {"ruser","RUSER", "%-*s ", 8, 10, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
395 {"time", "TIME", "%*s ", 6, 11, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
396 {"tty", "TT", "%-*s ", 6, 12, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
397 {"vsz","VSZ", "%*s ", 7, 13, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
398 {"stat", "STAT", "%-*s ", 4, 14, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
399 {"rss", "RSS", "%*s ", 4, 15, NULL},
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
400 {0,0,0,0,0,0}
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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
0d33dd5f537e Quick cleanup pass on ps.
Rob Landley <rob@landley.net>
parents: 1183
diff changeset
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 }