How to prevent the simultaneous opening of the program in golang?

How to prevent the simultaneous opening of the program in golang?
July 8th 19 at 16:44
1 answer
July 8th 19 at 16:46
package main

import (
"bytes"
"fmt"
"os"
"os/exec"
"runtime"
"strings"
)

func main() {
 result, err := isProgrammRunning()
 if err != nil {
fmt.Println(err)
os.Exit(1)
}
 if result {
 fmt.Println("Process is running - exit")
os.Exit(1)
}

 // Code
}

isProgrammRunning func() (bool, error) {
 name := os.Args[0]
 if runtime.GOOS == "windows" {
 cmd := exec.Command("tasklist.exe", "/fo", "csv", "/nh")
 nameSplit := strings.Split(name, "\\")
 name = nameSplit[len(nameSplit)-1]
 out, err := cmd.Output()
 if err != nil {
 return false, err
}
 name = "\"" + name + "\""
 if bytes.Index(out, []byte(name)) != -1 && bytes.Index(out, []byte(name)) != bytes.LastIndex(out, []byte(name)) {
 return true, nil
}
 } else {
 cmd := exec.Command("ps", "aco", "command")
 nameSplit := strings.Split(name, "/")
 name = nameSplit[len(nameSplit)-1]
 out, err := cmd.Output()
 if err != nil {
 return false, err
}
 str := strings.Split(string(out), "\n")
 count := 0
 for _, item := range str {
 if name == item {
count++
}
 if count == 2 {
 return true, nil
}
}
}
 return false, nil
}

Find more questions by tags Go