in pkg/exporter/nettop/k8s.go [81:139]
func (pc *PodCache) getSandboxPID(cgroupPath string) (int, error) {
var earliestTime time.Time
var sandboxPID int
err := filepath.Walk(cgroupPath, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
return nil
}
tasksFile := filepath.Join(path, "tasks")
content, err := os.ReadFile(tasksFile)
if err != nil {
return nil
}
pids := strings.Split(strings.TrimSpace(string(content)), "\n")
for _, pidStr := range pids {
pid, err := strconv.Atoi(pidStr)
if err != nil {
continue
}
procPath := filepath.Join("/proc", pidStr)
info, err := os.Stat(procPath)
if err != nil {
continue
}
cmdlinePath := filepath.Join(procPath, "cmdline")
cmdline, err := os.ReadFile(cmdlinePath)
if err != nil {
continue
}
if !strings.Contains(string(cmdline), "pause") {
continue
}
if earliestTime.IsZero() || info.ModTime().Before(earliestTime) {
earliestTime = info.ModTime()
sandboxPID = pid
}
}
return nil
})
if err != nil {
return 0, err
}
if sandboxPID == 0 {
return 0, fmt.Errorf("sandbox PID not found")
}
return sandboxPID, nil
}