From 341a1228aa471be015ca8fea5d6fc5d67942def0 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 13 Jan 2025 22:27:17 -0500 Subject: [PATCH] Fixed build and fixed flag processing --- .gitignore | 1 + Makefile | 10 ++++++---- proxmon | Bin 17432 -> 0 bytes src/process.h | 3 ++- src/server.c | 47 +++++++++++++++++++++++++++-------------------- 5 files changed, 36 insertions(+), 25 deletions(-) delete mode 100755 proxmon diff --git a/.gitignore b/.gitignore index c6127b3..d514f10 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ *.dylib # Executables +bin/ *.exe *.out *.app diff --git a/Makefile b/Makefile index 49fbbbe..73bd743 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ CC = gcc OUT_DIR = ./build -TARGET = proxmon +TARGET = ./bin/proxmon SRC_DIRS = ./src # Collect all C source files in the current directory @@ -10,24 +10,26 @@ SRCS := $(shell find $(SRC_DIRS) -name '*.c') # Generate object files in the build directory OBJS := $(patsubst $(SRC_DIRS)/%.c, $(OUT_DIR)/%.o, $(SRCS)) -INC_DIRS := /usr/src/linux-headers-$(uname -r)/include INC_DIRS := $(shell find $(SRC_DIRS) -type d) $(INC_DIRS) INC_FLAGS := $(addprefix -I,$(INC_DIRS)) CCFLAGS := $(INC_FLAGS) +./bin: + @mkdir -p ./bin + $(OUT_DIR): @mkdir -p $@ $(OUT_DIR)/%.o: $(SRC_DIRS)/%.c | $(OUT_DIR) $(CC) $(CCFLAGS) -c $< -o $@ -$(TARGET): $(OBJS) +$(TARGET): $(OBJS) | ./bin $(CC) $(CCFLAGS) $(OBJS) -o $@ .PHONY: all clean all: $(TARGET) clean: - @rm -rf $(TARGET) $(OUT_DIR) + @rm -rf bin/ $(OUT_DIR) diff --git a/proxmon b/proxmon deleted file mode 100755 index b34e29152b5f95367244fe1612cae386f4014152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17432 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 #include #include -#include #include "process.h" +#ifndef PF_KTHREAD +# define PF_KTHREAD 0x00200000 +#endif + static inline uint64_t fast_str2ull(char** str) { uint64_t result = 0; int maxlen = 20; // length of maximum value of 18446744073709551615 @@ -66,18 +69,22 @@ int parseStatFile(Process *proc, char *filedata) { proc->tgid = fast_str2ll(&location); location += 1; - if (proc->tgid != proc->pid) return -1; + if (proc->tgid && proc->tgid != proc->pid) return -1; // (6) session - %d location = strchr(location, ' ') + 1; // skip [7 - 14) - skipRange(7,14); - //skipRange(7, 9); + //skipRange(7,14); + skipRange(7, 9); // (9) flags - %u - //proc->iskernel = fast_str2ull(&location) & PF_KTHREAD; - //location += 1; + proc->flags = fast_str2ull(&location); + location += 1; + + printf("Flags for %d: %u %d\n", proc->pid, proc->flags, proc->flags & PF_KTHREAD); + proc->iskernel = (proc->flags & PF_KTHREAD) ? true : false; + location += 1; //skipRange(10, 14); @@ -135,7 +142,7 @@ int main(int argc, char *argv[]) { // Process each entry. - char *filedata = malloc(4096); + char *buffer = malloc(4096); char *fname = malloc(1024); FILE *file; @@ -148,10 +155,10 @@ int main(int argc, char *argv[]) { if (first < '0' || first > '9') continue; sprintf(fname, "/proc/%s/stat", pDirent->d_name); file = fopen(fname, "rb"); - fread(filedata, 1, 4096, file); + fread(buffer, 1, 4096, file); fclose(file); - if (parseStatFile(cur, filedata)) continue; + if (parseStatFile(cur, buffer)) continue; cur->next = malloc(sizeof(Process)); cur->next->label = malloc(256); cur->next->prev = cur; @@ -159,30 +166,30 @@ int main(int argc, char *argv[]) { strcat(fname, "us"); file = fopen(fname, "rb"); - fread(filedata, 1, 4096, file); + fread(buffer, 1, 4096, file); fclose(file); - strtok(filedata, "\n"); - printf("[%s]\n", filedata); + strtok(buffer, "\n"); } + closedir(pDir); + cur = cur->prev; free(cur->next); cur->next = NULL; int clocks = sysconf(_SC_CLK_TCK); - + cur = head; while (cur != NULL) { - printf("proc_cpu_time{pid=\"%d\",ppid=\"%d\",label=\"%s\"} %d\n", cur->pid, cur->ppid, cur->label, cur->cpuTime); - printf("proc_child_cpu_time{pid=\"%d\",ppid=\"%d\",label=\"%s\"} %d\n", cur->pid, cur->ppid, cur->label, cur->childCpuTime / clocks); - printf("proc_num_threads{pid=\"%d\",ppid=\"%d\",label=\"%s\"} %d\n", cur->pid, cur->ppid, cur->label, cur->nThreads); - printf("proc_resident_bytes{pid=\"%d\",ppid=\"%d\",label=\"%s\"} %d\n", cur->pid, cur->ppid, cur->label, cur->resident); + // create process descriptor + sprintf(buffer, "pid=\"%d\",ppid=\"%d\",label=\"%s\",kernel=\"%d\"", cur->pid, cur->ppid, cur->label, cur->iskernel); + printf("proc_cpu_time{%s} %d\n", buffer, cur->cpuTime); + printf("proc_child_cpu_time{%s} %d\n", buffer, cur->childCpuTime / clocks); + printf("proc_num_threads{%s} %d\n", buffer, cur->nThreads); + printf("proc_resident_bytes{%s} %d\n", buffer, cur->resident); cur = cur->next; } - // Close directory and exit. - - closedir(pDir); return 0; }