diff options
Diffstat (limited to 'procps/ps.c')
-rw-r--r-- | procps/ps.c | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/procps/ps.c b/procps/ps.c index b9a4aef15..4a6b60bdc 100644 --- a/procps/ps.c +++ b/procps/ps.c | |||
@@ -32,7 +32,7 @@ enum { MAX_WIDTH = 2*1024 }; | |||
32 | 32 | ||
33 | typedef struct { | 33 | typedef struct { |
34 | uint16_t width; | 34 | uint16_t width; |
35 | char name[6]; | 35 | char name6[6]; |
36 | const char *header; | 36 | const char *header; |
37 | void (*f)(char *buf, int size, const procps_status_t *ps); | 37 | void (*f)(char *buf, int size, const procps_status_t *ps); |
38 | int ps_flags; | 38 | int ps_flags; |
@@ -174,6 +174,11 @@ static void func_user(char *buf, int size, const procps_status_t *ps) | |||
174 | #endif | 174 | #endif |
175 | } | 175 | } |
176 | 176 | ||
177 | static void func_group(char *buf, int size, const procps_status_t *ps) | ||
178 | { | ||
179 | safe_strncpy(buf, get_cached_groupname(ps->gid), size+1); | ||
180 | } | ||
181 | |||
177 | static void func_comm(char *buf, int size, const procps_status_t *ps) | 182 | static void func_comm(char *buf, int size, const procps_status_t *ps) |
178 | { | 183 | { |
179 | safe_strncpy(buf, ps->comm, size+1); | 184 | safe_strncpy(buf, ps->comm, size+1); |
@@ -227,6 +232,26 @@ static void func_tty(char *buf, int size, const procps_status_t *ps) | |||
227 | snprintf(buf, size+1, "%u,%u", ps->tty_major, ps->tty_minor); | 232 | snprintf(buf, size+1, "%u,%u", ps->tty_major, ps->tty_minor); |
228 | } | 233 | } |
229 | 234 | ||
235 | |||
236 | #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS | ||
237 | |||
238 | static void func_rgroup(char *buf, int size, const procps_status_t *ps) | ||
239 | { | ||
240 | safe_strncpy(buf, get_cached_groupname(ps->rgid), size+1); | ||
241 | } | ||
242 | |||
243 | static void func_ruser(char *buf, int size, const procps_status_t *ps) | ||
244 | { | ||
245 | safe_strncpy(buf, get_cached_username(ps->ruid), size+1); | ||
246 | } | ||
247 | |||
248 | static void func_nice(char *buf, int size, const procps_status_t *ps) | ||
249 | { | ||
250 | sprintf(buf, "%*d", size, ps->niceness); | ||
251 | } | ||
252 | |||
253 | #endif /* FEATURE_PS_ADDITIONAL_COLUMNS */ | ||
254 | |||
230 | #if ENABLE_FEATURE_PS_TIME | 255 | #if ENABLE_FEATURE_PS_TIME |
231 | static void func_etime(char *buf, int size, const procps_status_t *ps) | 256 | static void func_etime(char *buf, int size, const procps_status_t *ps) |
232 | { | 257 | { |
@@ -276,6 +301,7 @@ static void func_pcpu(char *buf, int size, const procps_status_t *ps) | |||
276 | static const ps_out_t out_spec[] = { | 301 | static const ps_out_t out_spec[] = { |
277 | // Mandated by POSIX: | 302 | // Mandated by POSIX: |
278 | { 8 , "user" ,"USER" ,func_user ,PSSCAN_UIDGID }, | 303 | { 8 , "user" ,"USER" ,func_user ,PSSCAN_UIDGID }, |
304 | { 8 , "group" ,"GROUP" ,func_group ,PSSCAN_UIDGID }, | ||
279 | { 16 , "comm" ,"COMMAND",func_comm ,PSSCAN_COMM }, | 305 | { 16 , "comm" ,"COMMAND",func_comm ,PSSCAN_COMM }, |
280 | { 256 , "args" ,"COMMAND",func_args ,PSSCAN_COMM }, | 306 | { 256 , "args" ,"COMMAND",func_args ,PSSCAN_COMM }, |
281 | { 5 , "pid" ,"PID" ,func_pid ,PSSCAN_PID }, | 307 | { 5 , "pid" ,"PID" ,func_pid ,PSSCAN_PID }, |
@@ -284,11 +310,12 @@ static const ps_out_t out_spec[] = { | |||
284 | #if ENABLE_FEATURE_PS_TIME | 310 | #if ENABLE_FEATURE_PS_TIME |
285 | { sizeof("ELAPSED")-1, "etime" ,"ELAPSED",func_etime ,PSSCAN_START_TIME }, | 311 | { sizeof("ELAPSED")-1, "etime" ,"ELAPSED",func_etime ,PSSCAN_START_TIME }, |
286 | #endif | 312 | #endif |
287 | // { sizeof("GROUP" )-1, "group" ,"GROUP" ,func_group ,PSSCAN_UIDGID }, | 313 | #if ENABLE_FEATURE_PS_ADDITIONAL_COLUMNS |
288 | // { sizeof("NI" )-1, "nice" ,"NI" ,func_nice ,PSSCAN_ }, | 314 | { 5 , "nice" ,"NI" ,func_nice ,PSSCAN_NICE }, |
289 | // { sizeof("%CPU" )-1, "pcpu" ,"%CPU" ,func_pcpu ,PSSCAN_ }, | 315 | { 8 , "rgroup","RGROUP" ,func_rgroup,PSSCAN_RUIDGID }, |
290 | // { sizeof("RGROUP" )-1, "rgroup","RGROUP" ,func_rgroup,PSSCAN_UIDGID }, | 316 | { 8 , "ruser" ,"RUSER" ,func_ruser ,PSSCAN_RUIDGID }, |
291 | // { sizeof("RUSER" )-1, "ruser" ,"RUSER" ,func_ruser ,PSSCAN_UIDGID }, | 317 | // { 5 , "pcpu" ,"%CPU" ,func_pcpu ,PSSCAN_ }, |
318 | #endif | ||
292 | #if ENABLE_FEATURE_PS_TIME | 319 | #if ENABLE_FEATURE_PS_TIME |
293 | { 6 , "time" ,"TIME" ,func_time ,PSSCAN_STIME | PSSCAN_UTIME }, | 320 | { 6 , "time" ,"TIME" ,func_time ,PSSCAN_STIME | PSSCAN_UTIME }, |
294 | #endif | 321 | #endif |
@@ -311,7 +338,7 @@ static const ps_out_t* find_out_spec(const char *name) | |||
311 | { | 338 | { |
312 | unsigned i; | 339 | unsigned i; |
313 | for (i = 0; i < ARRAY_SIZE(out_spec); i++) { | 340 | for (i = 0; i < ARRAY_SIZE(out_spec); i++) { |
314 | if (!strcmp(name, out_spec[i].name)) | 341 | if (!strncmp(name, out_spec[i].name6, 6)) |
315 | return &out_spec[i]; | 342 | return &out_spec[i]; |
316 | } | 343 | } |
317 | bb_error_msg_and_die("bad -o argument '%s'", name); | 344 | bb_error_msg_and_die("bad -o argument '%s'", name); |