I've been messing around with perf, using inherit to trace a process tree.
What I've found is that when the process tree exits, we get HUP on the poll, and whatever events are in the kernel buffer at that time are lost.
I'm not sure I fully understand what's going on, but I've found anecdotally that here:
|
if resp.perfhup { |
|
// Saw POLLHUP on ev.perffd. See also the |
|
// documentation for ErrDisabled. |
|
return ErrDisabled |
If I insert:
if ev.readRawRecordNonblock(raw) {
return nil
}
Before return ErrDisabled, then it appears the events are not lost.
I've been messing around with perf, using
inheritto trace a process tree.What I've found is that when the process tree exits, we get HUP on the poll, and whatever events are in the kernel buffer at that time are lost.
I'm not sure I fully understand what's going on, but I've found anecdotally that here:
perf/record.go
Lines 130 to 133 in 6861f4b
If I insert:
Before
return ErrDisabled, then it appears the events are not lost.