Skip to content
Snippets Groups Projects
Verified Commit a858e94f authored by meskio's avatar meskio :tent:
Browse files

[bug] add windows support to the pid file

- Resolves: #43
parent 199ef6f9
No related branches found
No related tags found
No related merge requests found
......@@ -3,8 +3,10 @@ package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"runtime"
"strconv"
"syscall"
......@@ -20,15 +22,8 @@ func acquirePID() error {
return err
}
if current != 0 && current != pid {
proc, err := os.FindProcess(current)
if err != nil {
return err
}
err = proc.Signal(syscall.Signal(0))
if err == nil {
return fmt.Errorf("Another systray is running with pid: %d", current)
}
if current != pid && pidRunning(current) {
return fmt.Errorf("Another systray is running with pid: %d", current)
}
return setPID(pid)
......@@ -85,3 +80,24 @@ func setPID(pid int) error {
_, err = file.WriteString(fmt.Sprintf("%d", pid))
return err
}
func pidRunning(pid int) bool {
if pid == 0 {
return false
}
proc, err := os.FindProcess(pid)
if runtime.GOOS == "windows" {
return err == nil
}
if err != nil {
log.Printf("An error ocurred finding process: %v", err)
return false
}
err = proc.Signal(syscall.Signal(0))
if err == nil {
return true
}
return false
}
package main
import (
"syscall"
"testing"
)
const (
invalidPid = 345678
)
func TestPidRunning(t *testing.T) {
pid := syscall.Getpid()
if !pidRunning(pid) {
t.Errorf("pid %v is not running", pid)
}
if pidRunning(invalidPid) {
t.Errorf("pid %v is running", invalidPid)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment