pmap: fix bogus {no such process} comm field text

function                                             old     new   delta
read_cmdline                                         246     266     +20
procps_get_maps                                      196     193      -3
packed_usage                                       30413   30404      -9
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 20/-12)              Total: 8 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2015-10-24 03:45:57 +02:00
parent 00da72bee0
commit 049b007865
2 changed files with 7 additions and 5 deletions

View File

@ -588,12 +588,14 @@ void FAST_FUNC read_cmdline(char *buf, int col, unsigned pid, const char *comm)
buf[sz] = ' '; buf[sz] = ' ';
sz--; sz--;
} }
if (base[0] == '-') /* "-sh" (login shell)? */
base++;
/* If comm differs from argv0, prepend "{comm} ". /* If comm differs from argv0, prepend "{comm} ".
* It allows to see thread names set by prctl(PR_SET_NAME). * It allows to see thread names set by prctl(PR_SET_NAME).
*/ */
if (base[0] == '-') /* "-sh" (login shell)? */ if (!comm)
base++; return;
comm_len = strlen(comm); comm_len = strlen(comm);
/* Why compare up to comm_len, not COMM_LEN-1? /* Why compare up to comm_len, not COMM_LEN-1?
* Well, some processes rewrite argv, and use _spaces_ there * Well, some processes rewrite argv, and use _spaces_ there
@ -612,7 +614,7 @@ void FAST_FUNC read_cmdline(char *buf, int col, unsigned pid, const char *comm)
buf[col - 1] = '\0'; buf[col - 1] = '\0';
} }
} else { } else {
snprintf(buf, col, "[%s]", comm); snprintf(buf, col, "[%s]", comm ? comm : "?");
} }
} }

View File

@ -20,7 +20,7 @@
//usage:#define pmap_trivial_usage //usage:#define pmap_trivial_usage
//usage: "[-xq] PID" //usage: "[-xq] PID"
//usage:#define pmap_full_usage "\n\n" //usage:#define pmap_full_usage "\n\n"
//usage: "Display detailed process memory usage" //usage: "Display process memory usage"
//usage: "\n" //usage: "\n"
//usage: "\n -x Show details" //usage: "\n -x Show details"
//usage: "\n -q Quiet" //usage: "\n -q Quiet"
@ -66,7 +66,7 @@ static int procps_get_maps(pid_t pid, unsigned opt)
int ret; int ret;
char buf[256]; char buf[256];
read_cmdline(buf, sizeof(buf), pid, "no such process"); read_cmdline(buf, sizeof(buf), pid, NULL);
printf("%u: %s\n", (int)pid, buf); printf("%u: %s\n", (int)pid, buf);
if (!(opt & OPT_q) && (opt & OPT_x)) if (!(opt & OPT_q) && (opt & OPT_x))