func probeDetach()

in pkg/kprobe/kprobe.go [235:275]


func probeDetach(eventName string, perfFD int, kretProbe bool) error {
	log.Infof("Calling Detach on %s", eventName)

	if _, _, err := unix.Syscall(unix.SYS_IOCTL, uintptr(int(perfFD)), uintptr(uint(unix.PERF_EVENT_IOC_DISABLE)), 0); err != 0 {
		log.Errorf("error enabling perf event: %v", err)
		return err
	}
	unix.Close(perfFD)

	eventEnable := constdef.KPROBE_SYS_DEBUG + "/" + eventName + "/enable"
	if kretProbe {
		eventEnable = constdef.KRETPROBE_SYS_DEBUG + "/" + eventName + "/enable"
	}

	setEnable := []byte("0")

	err := ioutil.WriteFile(eventEnable, setEnable, os.ModePerm)
	if err != nil {
		return err
	}

	file, err := os.OpenFile(constdef.KPROBE_SYS_EVENTS, os.O_APPEND|os.O_WRONLY, 0)
	if err != nil {
		log.Errorf("cannot open probe events: %v", err)
		return err
	}
	defer file.Close()

	eventString := fmt.Sprintf("-:%s\n", eventName)
	if _, err = file.WriteString(eventString); err != nil {
		pathErr, ok := err.(*os.PathError)
		if ok && pathErr.Err == syscall.ENOENT {
			log.Infof("File is already cleanedup, maybe some other process?")
			return nil
		}
		log.Errorf("cannot update the probe events %v", err)
		return err
	}
	log.Infof("probe Detach done!!!")
	return nil
}