You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.4 KiB
55 lines
1.4 KiB
#include "cache.h" |
|
|
|
#include "strbuf.h" |
|
#include "strvec.h" |
|
#include "trace2.h" |
|
|
|
static void get_ancestry_names(struct strvec *names) |
|
{ |
|
/* |
|
* NEEDSWORK: We could gather the entire pstree into an array to match |
|
* functionality with compat/win32/trace2_win32_process_info.c. |
|
* To do so, we may want to examine /proc/<pid>/stat. For now, just |
|
* gather the immediate parent name which is readily accessible from |
|
* /proc/$(getppid())/comm. |
|
*/ |
|
struct strbuf procfs_path = STRBUF_INIT; |
|
struct strbuf name = STRBUF_INIT; |
|
|
|
/* try to use procfs if it's present. */ |
|
strbuf_addf(&procfs_path, "/proc/%d/comm", getppid()); |
|
if (strbuf_read_file(&name, procfs_path.buf, 0)) { |
|
strbuf_release(&procfs_path); |
|
strbuf_trim_trailing_newline(&name); |
|
strvec_push(names, strbuf_detach(&name, NULL)); |
|
} |
|
|
|
return; |
|
/* NEEDSWORK: add non-procfs-linux implementations here */ |
|
} |
|
|
|
void trace2_collect_process_info(enum trace2_process_info_reason reason) |
|
{ |
|
if (!trace2_is_enabled()) |
|
return; |
|
|
|
/* someday we may want to write something extra here, but not today */ |
|
if (reason == TRACE2_PROCESS_INFO_EXIT) |
|
return; |
|
|
|
if (reason == TRACE2_PROCESS_INFO_STARTUP) { |
|
/* |
|
* NEEDSWORK: we could do the entire ptree in an array instead, |
|
* see compat/win32/trace2_win32_process_info.c. |
|
*/ |
|
struct strvec names = STRVEC_INIT; |
|
|
|
get_ancestry_names(&names); |
|
|
|
if (names.nr) |
|
trace2_cmd_ancestry(names.v); |
|
strvec_clear(&names); |
|
} |
|
|
|
return; |
|
}
|
|
|