annotate toys/pending/ps.c @ 1215:4eaac3e63fa7 draft

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