From bea32af5d45702e5608d347bf2bf6314d899f2e0 Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Sat, 12 Jan 2019 18:18:23 +0100 Subject: [feat] Reorganize code Let's use a more structured folder system: https://github.com/golang-standards/project-layout - Resolves: #99 --- pid.go | 99 ------------------------------------------------------------------ 1 file changed, 99 deletions(-) delete mode 100644 pid.go (limited to 'pid.go') diff --git a/pid.go b/pid.go deleted file mode 100644 index 2c283ac..0000000 --- a/pid.go +++ /dev/null @@ -1,99 +0,0 @@ -package main - -import ( - "fmt" - "io/ioutil" - "log" - "os" - "path/filepath" - "strconv" - "strings" - "syscall" - - "0xacab.org/leap/bitmask-systray/bitmask" - "github.com/mitchellh/go-ps" -) - -var pidFile = filepath.Join(bitmask.ConfigPath, "systray.pid") - -func acquirePID() error { - pid := syscall.Getpid() - current, err := getPID() - if err != nil { - return err - } - - if current != pid && pidRunning(current) { - return fmt.Errorf("Another systray is running with pid: %d", current) - } - - return setPID(pid) -} - -func releasePID() error { - pid := syscall.Getpid() - current, err := getPID() - if err != nil { - return err - } - if current != 0 && current != pid { - return fmt.Errorf("Can't release pid file, is not own by this process") - } - - if current == pid { - return os.Remove(pidFile) - } - return nil -} - -func getPID() (int, error) { - _, err := os.Stat(pidFile) - if os.IsNotExist(err) { - return 0, nil - } - if err != nil { - return 0, err - } - - file, err := os.Open(pidFile) - if err != nil { - return 0, err - } - defer file.Close() - - b, err := ioutil.ReadAll(file) - if err != nil { - return 0, err - } - if len(b) == 0 { - return 0, nil - } - return strconv.Atoi(string(b)) -} - -func setPID(pid int) error { - file, err := os.Create(pidFile) - if err != nil { - return err - } - defer file.Close() - - _, err = file.WriteString(fmt.Sprintf("%d", pid)) - return err -} - -func pidRunning(pid int) bool { - if pid == 0 { - return false - } - proc, err := ps.FindProcess(pid) - if err != nil { - log.Printf("An error ocurred finding process: %v", err) - return false - } - if proc == nil { - return false - } - log.Printf("There is a running process with the pid %d and executable: %s", pid, proc.Executable()) - return strings.Contains(os.Args[0], proc.Executable()) -} -- cgit v1.2.3