MCPcopy Create free account
hub / github.com/SeeFlowerX/stackplz / UpdateForkEvent

Method UpdateForkEvent

user/event/event_mmap2.go:141–161  ·  view source on GitHub ↗
(event *ForkEvent)

Source from the content-addressed store, hash-verified

139}
140
141func (this *MapsHelper) UpdateForkEvent(event *ForkEvent) {
142 // 根据日志实际的记录结果 fork 的 pid ppid 存在相同的情况 why
143 parent_pid, ok := this.child_parent_map[event.Pid]
144 if !ok {
145 this.child_parent_map[event.Pid] = event.Ppid
146 // 为了便于后续能够快速查找进程的maps
147 // 出现fork事件的时候 把父进程已经收集到的 maps 信息也复制一份
148 // 最开始想设计为需要计算的时候 查找父进程 再去解析偏移 但是考虑到fork产生的子进程可能会产生新的操作 这样不合理
149 if event.Pid != event.Ppid {
150 this.CloneMaps(event.Pid, event.Ppid)
151 }
152 } else {
153 // 大多数情况下应该是不会到这个分支的 除非是进程id不够用了
154 // 例如 A 产生 B B 产生 C A结束 C 产生 D 那么这个时候 D 被分配的pid可能是之前A的pid(应该是有这个概率的
155 if parent_pid != event.Ppid {
156 // 本次所产生的子进程的父进程 与原本记录的父进程不一致
157 // 那么更新此次的子进程的父进程
158 this.child_parent_map[event.Pid] = event.Ppid
159 }
160 }
161}
162
163func (this *MapsHelper) CloneMaps(pid, parent_pid uint32) (err error) {
164 // 为子进程复制一份maps信息

Callers 1

ParseContextMethod · 0.80

Calls 1

CloneMapsMethod · 0.95

Tested by

no test coverage detected