diff options
Diffstat (limited to 'procps/ps.c')
-rw-r--r-- | procps/ps.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/procps/ps.c b/procps/ps.c index 9d6e42d79..2ff6e77d4 100644 --- a/procps/ps.c +++ b/procps/ps.c | |||
@@ -11,7 +11,7 @@ | |||
11 | 11 | ||
12 | int ps_main(int argc, char **argv) | 12 | int ps_main(int argc, char **argv) |
13 | { | 13 | { |
14 | procps_status_t * p; | 14 | procps_status_t *p = NULL; |
15 | int i, len; | 15 | int i, len; |
16 | SKIP_SELINUX(const) int use_selinux = 0; | 16 | SKIP_SELINUX(const) int use_selinux = 0; |
17 | USE_SELINUX(security_context_t sid = NULL;) | 17 | USE_SELINUX(security_context_t sid = NULL;) |
@@ -50,7 +50,13 @@ int ps_main(int argc, char **argv) | |||
50 | else | 50 | else |
51 | puts(" PID Uid VmSize Stat Command"); | 51 | puts(" PID Uid VmSize Stat Command"); |
52 | 52 | ||
53 | while ((p = procps_scan(1)) != 0) { | 53 | while ((p = procps_scan(p, 0 |
54 | | PSSCAN_PID | ||
55 | | PSSCAN_UIDGID | ||
56 | | PSSCAN_STATE | ||
57 | | PSSCAN_RSS | ||
58 | | PSSCAN_CMD | ||
59 | ))) { | ||
54 | char *namecmd = p->cmd; | 60 | char *namecmd = p->cmd; |
55 | #if ENABLE_SELINUX | 61 | #if ENABLE_SELINUX |
56 | if (use_selinux) { | 62 | if (use_selinux) { |
@@ -71,13 +77,18 @@ int ps_main(int argc, char **argv) | |||
71 | } else { | 77 | } else { |
72 | safe_strncpy(sbuf, "unknown", 7); | 78 | safe_strncpy(sbuf, "unknown", 7); |
73 | } | 79 | } |
74 | len = printf("%5u %-32s %s ", (unsigned)p->pid, sbuf, p->state); | 80 | len = printf("%5u %-32s %s ", p->pid, sbuf, p->state); |
75 | } else | 81 | } else |
76 | #endif | 82 | #endif |
83 | { | ||
84 | const char *user = get_cached_username(p->uid); | ||
77 | if (p->rss == 0) | 85 | if (p->rss == 0) |
78 | len = printf("%5u %-8s %s ", (unsigned)p->pid, p->user, p->state); | 86 | len = printf("%5u %-8s %s ", |
87 | p->pid, user, p->state); | ||
79 | else | 88 | else |
80 | len = printf("%5u %-8s %6ld %s ", (unsigned)p->pid, p->user, p->rss, p->state); | 89 | len = printf("%5u %-8s %6ld %s ", |
90 | p->pid, user, p->rss, p->state); | ||
91 | } | ||
81 | 92 | ||
82 | i = terminal_width-len; | 93 | i = terminal_width-len; |
83 | 94 | ||
@@ -88,16 +99,15 @@ int ps_main(int argc, char **argv) | |||
88 | namecmd[i] = 0; | 99 | namecmd[i] = 0; |
89 | puts(namecmd); | 100 | puts(namecmd); |
90 | } else { | 101 | } else { |
91 | namecmd = p->short_cmd; | 102 | namecmd = p->comm; |
92 | if (i < 2) | 103 | if (i < 2) |
93 | i = 2; | 104 | i = 2; |
94 | if (strlen(namecmd) > ((size_t)i-2)) | 105 | if (strlen(namecmd) > ((size_t)i-2)) |
95 | namecmd[i-2] = 0; | 106 | namecmd[i-2] = 0; |
96 | printf("[%s]\n", namecmd); | 107 | printf("[%s]\n", namecmd); |
97 | } | 108 | } |
98 | /* no check needed, but to make valgrind happy.. */ | ||
99 | if (ENABLE_FEATURE_CLEAN_UP && p->cmd) | ||
100 | free(p->cmd); | ||
101 | } | 109 | } |
110 | if (ENABLE_FEATURE_CLEAN_UP) | ||
111 | clear_username_cache(); | ||
102 | return EXIT_SUCCESS; | 112 | return EXIT_SUCCESS; |
103 | } | 113 | } |