From 05e02b7bb1d565d8103b49e3902dbad10a485cc1 Mon Sep 17 00:00:00 2001 From: li-long315 Date: Fri, 16 Jun 2023 19:42:45 +0800 Subject: [PATCH] Process Event and Listening for SIGINT signal --- observation/src/threadsnoop/threadsnoop.c | 40 +++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/observation/src/threadsnoop/threadsnoop.c b/observation/src/threadsnoop/threadsnoop.c index 9f959b1a..cee886d4 100644 --- a/observation/src/threadsnoop/threadsnoop.c +++ b/observation/src/threadsnoop/threadsnoop.c @@ -46,6 +46,34 @@ static int libbpf_print_fn(enum libbpf_print_level level, const char *format, return vfprintf(stderr, format, args); } +static void sig_handler(int sig) +{ + exiting = 1; +} + +static int handle_event(void *ctx, void *data, size_t data_sz) +{ + const struct event *e = data; + char ts[16]; + struct syms_cache *syms_cache = *((struct syms_cache **)ctx); + const struct syms *syms; + const struct sym *sym = NULL; + + syms = syms_cache__get_syms(syms_cache, e->pid); + if (syms) + sym = syms__map_addr(syms, e->function_addr); + + strftime_now(ts, sizeof(ts), "%H:%M:%S"); + printf("%-10s %-6d %-16s ", ts, e->pid, e->comm); + + return 0; +} + +static void handle_lost_events(void *ctx, int cpu, __u64 lost_cnt) +{ + warning("Lost %llu events on cpu #%d\n", lost_cnt, cpu); +} + static int attach_uprobes(struct threadsnoop_bpf *obj, struct bpf_link **link) { char *pthread_lib_path; @@ -128,6 +156,18 @@ int main(int argc, char *argv[]) goto cleanup; } + err = bpf_buffer__open(buf, handle_event, handle_lost_events, &syms_cache); + if (err) { + warning("Failed to open ring/perf buffer: %d\n", err); + goto cleanup; + } + + if (signal(SIGINT, sig_handler) == SIG_ERR) { + warning("Can't set signal handler: %s\n", strerror(errno)); + err = 1; + goto cleanup; + } + cleanup: bpf_buffer__free(buf); threadsnoop_bpf__destroy(obj); -- Gitee