summaryrefslogtreecommitdiff
path: root/pid.go
diff options
context:
space:
mode:
authorRuben Pollan <meskio@sindominio.net>2019-01-12 18:18:23 +0100
committerRuben Pollan <meskio@sindominio.net>2019-01-15 14:39:21 +0100
commitbea32af5d45702e5608d347bf2bf6314d899f2e0 (patch)
tree3a3b65123a751624a866176d9d59424707474363 /pid.go
parent933ad2aeda754499753e91be05aa9f5556539d35 (diff)
[feat] Reorganize code
Let's use a more structured folder system: https://github.com/golang-standards/project-layout - Resolves: #99
Diffstat (limited to 'pid.go')
-rw-r--r--pid.go99
1 files changed, 0 insertions, 99 deletions
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())
-}