Last active
July 26, 2024 13:17
-
-
Save davidnewhall/3627895a9fc8fa0affbd747183abca39 to your computer and use it in GitHub Desktop.
How to write a PID file in Golang.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Write a pid file, but first make sure it doesn't exist with a running pid. | |
func writePidFile(pidFile string) error { | |
// Read in the pid file as a slice of bytes. | |
if piddata, err := ioutil.ReadFile(pidFile); err == nil { | |
// Convert the file contents to an integer. | |
if pid, err := strconv.Atoi(string(piddata)); err == nil { | |
// Look for the pid in the process list. | |
if process, err := os.FindProcess(pid); err == nil { | |
// Send the process a signal zero kill. | |
if err := process.Signal(syscall.Signal(0)); err == nil { | |
// We only get an error if the pid isn't running, or it's not ours. | |
return fmt.Errorf("pid already running: %d", pid) | |
} | |
} | |
} | |
} | |
// If we get here, then the pidfile didn't exist, | |
// or the pid in it doesn't belong to the user running this app. | |
return ioutil.WriteFile(pidFile, []byte(fmt.Sprintf("%d", os.Getpid())), 0664) | |
} |
All good, I just shared it in this gist thread since someone else could need it as I did.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
fwiw, I wrote this code when I was very new to go, and this is not how I would write it today. Good luck!