diff --git a/pid.go b/pid.go
index 0636110159f8a8a35101ed5be393fef9d74fc241..3b8e1326fd6e67ac67d764ad71e17ae6ff5df56f 100644
--- a/pid.go
+++ b/pid.go
@@ -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
+}
diff --git a/pid_test.go b/pid_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..2c926417e59f86e2bf7e0f4fe92358b80de04d95
--- /dev/null
+++ b/pid_test.go
@@ -0,0 +1,21 @@
+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)
+	}
+}