diff options
| author | Paul Buetow <paul@buetow.org> | 2025-03-06 23:06:24 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-03-06 23:06:24 +0200 |
| commit | 2a52d1df8e8c83031b87dca801bb0415d423249a (patch) | |
| tree | 3f441fc48f73dd7b9a492bdb8bc55a3c030dcfde /internal | |
| parent | 0b06e51ea1d6eec4db969064708e1ba997e14f1d (diff) | |
find comm name dynamically
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/eventloop.go | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go index b26ae35..78f99e7 100644 --- a/internal/eventloop.go +++ b/internal/eventloop.go @@ -4,6 +4,7 @@ import "C" import ( "fmt" + "os" "ioriotng/internal/flags" . "ioriotng/internal/generated/types" @@ -107,6 +108,7 @@ func (e *eventLoop) syscallExit(exitEv event, ch chan<- *eventPair) { ev.file = file comm := string(openEv.Comm[:]) + // TODO: Filter out all other events not matching comm filter as well when comm filter enabled e.comms[openEv.Tid] = comm case *NameEvent: @@ -115,12 +117,12 @@ func (e *eventLoop) syscallExit(exitEv event, ch chan<- *eventPair) { oldname: string(nameEvent.Oldname[:]), newname: string(nameEvent.Newname[:]), } - ev.comm, _ = e.comms[ev.enterEv.GetTid()] + ev.comm = e.comm(ev.enterEv.GetTid()) case *PathEvent: nameEvent := ev.enterEv.(*PathEvent) ev.file = pathnameFile{string(nameEvent.Pathname[:])} - ev.comm, _ = e.comms[ev.enterEv.GetTid()] + ev.comm = e.comm(ev.enterEv.GetTid()) case *FdEvent: fd := ev.enterEv.(*FdEvent).Fd @@ -132,10 +134,10 @@ func (e *eventLoop) syscallExit(exitEv event, ch chan<- *eventPair) { } else { ev.file = newFdFileWithPid(fd, ev.enterEv.(*FdEvent).Pid) } - ev.comm, _ = e.comms[ev.enterEv.GetTid()] + ev.comm = e.comm(ev.enterEv.GetTid()) case *NullEvent: - ev.comm, _ = e.comms[ev.enterEv.GetTid()] + ev.comm = e.comm(ev.enterEv.GetTid()) default: panic(fmt.Sprintf("unknown type: %v", v)) @@ -146,3 +148,14 @@ func (e *eventLoop) syscallExit(exitEv event, ch chan<- *eventPair) { e.prevPairs[ev.enterEv.GetTid()] = ev ch <- ev } + +func (e *eventLoop) comm(pid uint32) string { + if comm, ok := e.comms[pid]; ok { + return comm + } + if linkName, err := os.Readlink(fmt.Sprintf("/proc/%d/exe", pid)); err == nil { + e.comms[pid] = linkName + return linkName + } + return "" +} |
