diff options
author | Roland McGrath <roland@gnu.org> | 1999-05-29 20:20:46 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1999-05-29 20:20:46 +0000 |
commit | 7dfdfb60c553604b91c25f45f91aa8f35d544ff3 (patch) | |
tree | 2bf958e95b2e2f955790e9c8b9c5a66981b6bed8 | |
parent | ceaf1bc178a5af407698bb2d49aa0707e25ee568 (diff) |
1999-05-29 Roland McGrath <roland@baalperazim.frob.com>
* spec.c (ps_emit_past_time, ps_emit_minutes): Fix return type of
getter fn (int to void).
* spec.c (ps_get_start_time, ps_start_time_getter): New function and
constant to report task_basic_info.creation_time time stamp via
"start_time" spec.
(specs): Add "Start" fmt for it.
-rw-r--r-- | libps/spec.c | 98 |
1 files changed, 55 insertions, 43 deletions
diff --git a/libps/spec.c b/libps/spec.c index 779444ed..f790b691 100644 --- a/libps/spec.c +++ b/libps/spec.c @@ -1,8 +1,8 @@ /* Access, formatting, & comparison routines for printing process info. - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,99 Free Software Foundation, Inc. - Written by Miles Bader <miles@gnu.ai.mit.edu> + Written by Miles Bader <miles@gnu.org> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -41,7 +41,7 @@ static char *get_rpc_name (mach_msg_id_t it) { return 0; } typedef void (*vf)(); -static int +static int ps_get_pid (struct proc_stat *ps) { return proc_stat_pid (ps); @@ -49,7 +49,7 @@ ps_get_pid (struct proc_stat *ps) const struct ps_getter ps_pid_getter = {"pid", PSTAT_PID, (vf) ps_get_pid}; -static int +static int ps_get_thread_index (struct proc_stat *ps) { return proc_stat_thread_index (ps); @@ -73,7 +73,7 @@ ps_get_owner_uid (struct proc_stat *ps) const struct ps_getter ps_owner_uid_getter = {"uid", PSTAT_OWNER_UID, (vf) ps_get_owner_uid}; -static int +static int ps_get_ppid (struct proc_stat *ps) { return proc_stat_proc_info (ps)->ppid; @@ -81,7 +81,7 @@ ps_get_ppid (struct proc_stat *ps) const struct ps_getter ps_ppid_getter = {"ppid", PSTAT_PROC_INFO, (vf) ps_get_ppid}; -static int +static int ps_get_pgrp (struct proc_stat *ps) { return proc_stat_proc_info (ps)->pgrp; @@ -89,7 +89,7 @@ ps_get_pgrp (struct proc_stat *ps) const struct ps_getter ps_pgrp_getter = {"pgrp", PSTAT_PROC_INFO, (vf) ps_get_pgrp}; -static int +static int ps_get_session (struct proc_stat *ps) { return proc_stat_proc_info (ps)->session; @@ -97,7 +97,7 @@ ps_get_session (struct proc_stat *ps) const struct ps_getter ps_session_getter = {"session", PSTAT_PROC_INFO, (vf) ps_get_session}; -static int +static int ps_get_login_col (struct proc_stat *ps) { return proc_stat_proc_info (ps)->logincollection; @@ -105,7 +105,7 @@ ps_get_login_col (struct proc_stat *ps) const struct ps_getter ps_login_col_getter = {"login_col", PSTAT_PROC_INFO, (vf) ps_get_login_col}; -static int +static int ps_get_num_threads (struct proc_stat *ps) { return proc_stat_num_threads (ps); @@ -113,7 +113,7 @@ ps_get_num_threads (struct proc_stat *ps) const struct ps_getter ps_num_threads_getter = {"num_threads", PSTAT_NUM_THREADS, (vf)ps_get_num_threads}; -static void +static void ps_get_args (struct proc_stat *ps, char **args_p, int *args_len_p) { *args_p = proc_stat_args (ps); @@ -122,7 +122,7 @@ ps_get_args (struct proc_stat *ps, char **args_p, int *args_len_p) const struct ps_getter ps_args_getter = {"args", PSTAT_ARGS, ps_get_args}; -static int +static int ps_get_state (struct proc_stat *ps) { return proc_stat_state (ps); @@ -139,7 +139,7 @@ ps_get_wait (struct proc_stat *ps, char **wait, int *rpc) const struct ps_getter ps_wait_getter = {"wait", PSTAT_THREAD_WAIT, ps_get_wait}; -static int +static int ps_get_vsize (struct proc_stat *ps) { return proc_stat_task_basic_info (ps)->virtual_size; @@ -147,7 +147,7 @@ ps_get_vsize (struct proc_stat *ps) const struct ps_getter ps_vsize_getter = {"vsize", PSTAT_TASK_BASIC, (vf) ps_get_vsize}; -static int +static int ps_get_rsize (struct proc_stat *ps) { return proc_stat_task_basic_info (ps)->resident_size; @@ -155,7 +155,7 @@ ps_get_rsize (struct proc_stat *ps) const struct ps_getter ps_rsize_getter = {"rsize", PSTAT_TASK_BASIC, (vf) ps_get_rsize}; -static int +static int ps_get_cur_priority (struct proc_stat *ps) { return proc_stat_thread_basic_info (ps)->cur_priority; @@ -163,7 +163,7 @@ ps_get_cur_priority (struct proc_stat *ps) const struct ps_getter ps_cur_priority_getter = {"cur_priority", PSTAT_THREAD_BASIC, (vf) ps_get_cur_priority}; -static int +static int ps_get_base_priority (struct proc_stat *ps) { return proc_stat_thread_basic_info (ps)->base_priority; @@ -171,7 +171,7 @@ ps_get_base_priority (struct proc_stat *ps) const struct ps_getter ps_base_priority_getter = {"base_priority", PSTAT_THREAD_BASIC, (vf) ps_get_base_priority}; -static int +static int ps_get_max_priority (struct proc_stat *ps) { return proc_stat_thread_sched_info (ps)->max_priority; @@ -179,7 +179,7 @@ ps_get_max_priority (struct proc_stat *ps) const struct ps_getter ps_max_priority_getter = {"max_priority", PSTAT_THREAD_SCHED, (vf) ps_get_max_priority}; -static void +static void ps_get_usr_time (struct proc_stat *ps, struct timeval *tv) { time_value_t tvt = proc_stat_thread_basic_info (ps)->user_time; @@ -189,7 +189,7 @@ ps_get_usr_time (struct proc_stat *ps, struct timeval *tv) const struct ps_getter ps_usr_time_getter = {"usr_time", PSTAT_THREAD_BASIC, ps_get_usr_time}; -static void +static void ps_get_sys_time (struct proc_stat *ps, struct timeval *tv) { time_value_t tvt = proc_stat_thread_basic_info (ps)->system_time; @@ -199,7 +199,7 @@ ps_get_sys_time (struct proc_stat *ps, struct timeval *tv) const struct ps_getter ps_sys_time_getter = {"sys_time", PSTAT_THREAD_BASIC, ps_get_sys_time}; -static void +static void ps_get_tot_time (struct proc_stat *ps, struct timeval *tv) { time_value_t tvt = proc_stat_thread_basic_info (ps)->user_time; @@ -210,7 +210,17 @@ ps_get_tot_time (struct proc_stat *ps, struct timeval *tv) const struct ps_getter ps_tot_time_getter = {"tot_time", PSTAT_THREAD_BASIC, ps_get_tot_time}; -static float +static void +ps_get_start_time (struct proc_stat *ps, struct timeval *tv) +{ + time_value_t *const tvt = &proc_stat_task_basic_info (ps)->creation_time; + tv->tv_sec = tvt->seconds; + tv->tv_usec = tvt->microseconds; +} +const struct ps_getter ps_start_time_getter = +{"start_time", PSTAT_TASK_BASIC, ps_get_start_time}; + +static float ps_get_rmem_frac (struct proc_stat *ps) { static int mem_size = 0; @@ -222,7 +232,7 @@ ps_get_rmem_frac (struct proc_stat *ps) if (err == 0) mem_size = info->memory_size; } - + if (mem_size > 0) return (float)proc_stat_task_basic_info (ps)->resident_size @@ -233,7 +243,7 @@ ps_get_rmem_frac (struct proc_stat *ps) const struct ps_getter ps_rmem_frac_getter = {"rmem_frac", PSTAT_TASK_BASIC, (vf) ps_get_rmem_frac}; -static float +static float ps_get_cpu_frac (struct proc_stat *ps) { return (float) proc_stat_thread_basic_info (ps)->cpu_usage @@ -242,7 +252,7 @@ ps_get_cpu_frac (struct proc_stat *ps) const struct ps_getter ps_cpu_frac_getter = {"cpu_frac", PSTAT_THREAD_BASIC, (vf) ps_get_cpu_frac}; -static int +static int ps_get_sleep (struct proc_stat *ps) { return proc_stat_thread_basic_info (ps)->sleep_time; @@ -250,7 +260,7 @@ ps_get_sleep (struct proc_stat *ps) const struct ps_getter ps_sleep_getter = {"sleep", PSTAT_THREAD_BASIC, (vf) ps_get_sleep}; -static int +static int ps_get_susp_count (struct proc_stat *ps) { return proc_stat_suspend_count (ps); @@ -258,7 +268,7 @@ ps_get_susp_count (struct proc_stat *ps) const struct ps_getter ps_susp_count_getter = {"susp_count", PSTAT_SUSPEND_COUNT, (vf) ps_get_susp_count}; -static int +static int ps_get_proc_susp_count (struct proc_stat *ps) { return proc_stat_task_basic_info (ps)->suspend_count; @@ -266,7 +276,7 @@ ps_get_proc_susp_count (struct proc_stat *ps) const struct ps_getter ps_proc_susp_count_getter = {"proc_susp_count", PSTAT_TASK_BASIC, (vf) ps_get_proc_susp_count}; -static int +static int ps_get_thread_susp_count (struct proc_stat *ps) { return proc_stat_thread_basic_info (ps)->suspend_count; @@ -282,7 +292,7 @@ ps_get_tty (struct proc_stat *ps) const struct ps_getter ps_tty_getter = {"tty", PSTAT_TTY, (vf)ps_get_tty}; -static int +static int ps_get_page_faults (struct proc_stat *ps) { return proc_stat_task_events_info (ps)->faults; @@ -290,7 +300,7 @@ ps_get_page_faults (struct proc_stat *ps) const struct ps_getter ps_page_faults_getter = {"page_faults", PSTAT_TASK_EVENTS, (vf) ps_get_page_faults}; -static int +static int ps_get_cow_faults (struct proc_stat *ps) { return proc_stat_task_events_info (ps)->cow_faults; @@ -298,7 +308,7 @@ ps_get_cow_faults (struct proc_stat *ps) const struct ps_getter ps_cow_faults_getter = {"cow_faults", PSTAT_TASK_EVENTS, (vf) ps_get_cow_faults}; -static int +static int ps_get_pageins (struct proc_stat *ps) { return proc_stat_task_events_info (ps)->pageins; @@ -306,7 +316,7 @@ ps_get_pageins (struct proc_stat *ps) const struct ps_getter ps_pageins_getter = {"pageins", PSTAT_TASK_EVENTS, (vf) ps_get_pageins}; -static int +static int ps_get_msgs_sent (struct proc_stat *ps) { return proc_stat_task_events_info (ps)->messages_sent; @@ -314,7 +324,7 @@ ps_get_msgs_sent (struct proc_stat *ps) const struct ps_getter ps_msgs_sent_getter = {"msgs_sent", PSTAT_TASK_EVENTS, (vf) ps_get_msgs_sent}; -static int +static int ps_get_msgs_rcvd (struct proc_stat *ps) { return proc_stat_task_events_info (ps)->messages_received; @@ -322,7 +332,7 @@ ps_get_msgs_rcvd (struct proc_stat *ps) const struct ps_getter ps_msgs_rcvd_getter = {"msgs_rcvd", PSTAT_TASK_EVENTS, (vf) ps_get_msgs_rcvd}; -static int +static int ps_get_zero_fills (struct proc_stat *ps) { return proc_stat_task_events_info (ps)->zero_fills; @@ -378,7 +388,7 @@ ps_emit_num_blocks (struct proc_stat *ps, struct ps_fmt_field *field, return ps_stream_write_field (stream, buf, field->width); } -int +int sprint_frac_value (char *buf, int value, int min_value_len, int frac, int frac_scale, @@ -479,7 +489,7 @@ ps_emit_minutes (struct proc_stat *ps, struct ps_fmt_field *field, struct timeval tv; int width = field->width; - FG (field, int)(ps, &tv); + FG (field, void)(ps, &tv); if ((field->flags & PS_FMT_FIELD_COLON_MOD) && tv.tv_sec < 60) strcpy (buf, "-"); @@ -499,7 +509,7 @@ ps_emit_past_time (struct proc_stat *ps, struct ps_fmt_field *field, struct timeval tv; int width = field->width; - FG (field, int)(ps, &tv); + FG (field, void)(ps, &tv); if (now.tv_sec == 0 && gettimeofday (&now, 0) < 0) return errno; @@ -777,7 +787,7 @@ ps_emit_wait (struct proc_stat *ps, struct ps_fmt_field *field, #define GUARDED_CMP(s1, s2, call) \ ((s1) == NULL ? (((s2) == NULL) ? 0 : -1) : ((s2) == NULL ? 1 : (call))) -int +int ps_cmp_ints (struct proc_stat *ps1, struct proc_stat *ps2, const struct ps_getter *getter) { @@ -786,7 +796,7 @@ ps_cmp_ints (struct proc_stat *ps1, struct proc_stat *ps2, return v1 == v2 ? 0 : v1 < v2 ? -1 : 1; } -int +int ps_cmp_floats (struct proc_stat *ps1, struct proc_stat *ps2, const struct ps_getter *getter) { @@ -795,7 +805,7 @@ ps_cmp_floats (struct proc_stat *ps1, struct proc_stat *ps2, return v1 == v2 ? 0 : v1 < v2 ? -1 : 1; } -int +int ps_cmp_uids (struct proc_stat *ps1, struct proc_stat *ps2, const struct ps_getter *getter) { @@ -804,7 +814,7 @@ ps_cmp_uids (struct proc_stat *ps1, struct proc_stat *ps2, return (u1 ? ps_user_uid (u1) : -1) - (u2 ? ps_user_uid (u2) : -1); } -int +int ps_cmp_unames (struct proc_stat *ps1, struct proc_stat *ps2, const struct ps_getter *getter) { @@ -815,7 +825,7 @@ ps_cmp_unames (struct proc_stat *ps1, struct proc_stat *ps2, return GUARDED_CMP (pw1, pw2, strcmp (pw1->pw_name, pw2->pw_name)); } -int +int ps_cmp_strings (struct proc_stat *ps1, struct proc_stat *ps2, const struct ps_getter *getter) { @@ -887,7 +897,7 @@ ps_nominal_nth (struct proc_stat *ps, const struct ps_getter *getter) static int own_uid = -2; /* -1 means no uid at all. */ /* A user is nominal if it's the current user. */ -int +int ps_nominal_user (struct proc_stat *ps, const struct ps_getter *getter) { struct ps_user *u = G (getter, struct ps_user *)(ps); @@ -897,7 +907,7 @@ ps_nominal_user (struct proc_stat *ps, const struct ps_getter *getter) } /* A uid is nominal if it's that of the current user. */ -int +int ps_nominal_uid (struct proc_stat *ps, const struct ps_getter *getter) { uid_t uid = G (getter, uid_t)(ps); @@ -939,7 +949,7 @@ specv_find (const struct ps_fmt_spec *specs, const char *name, return 0; } -/* Number of specs allocated in each block of expansions. */ +/* Number of specs allocated in each block of expansions. */ #define EXP_BLOCK_SIZE 20 /* A node in a linked list of spec vectors. */ @@ -1077,6 +1087,8 @@ static const struct ps_fmt_spec specs[] = &ps_args_getter, ps_emit_args, ps_cmp_strings,ps_nominal_string}, {"Arg0", 0, 0, -1, 0, &ps_args_getter, ps_emit_string, ps_cmp_strings,ps_nominal_string}, + {"Start", 0, -7, 1, 0, + &ps_start_time_getter, ps_emit_past_time, ps_cmp_times,0}, {"Time", 0, -8, 2, 0, &ps_tot_time_getter, ps_emit_seconds, ps_cmp_times, 0}, {"UTime", 0, -8, 2, 0, |