Files
drip/internal/client/cli/daemon_unix.go

39 lines
993 B
Go

//go:build !windows
package cli
import (
"os"
"os/exec"
"syscall"
)
// getSysProcAttr returns platform-specific process attributes for daemonization
func getSysProcAttr() *syscall.SysProcAttr {
return &syscall.SysProcAttr{
Setsid: true, // Create new session (Unix only)
}
}
// isProcessRunningOS checks if a process is running using OS-specific method
func isProcessRunningOS(process *os.Process) bool {
// On Unix, FindProcess always succeeds, so we need to send signal 0 to check
err := process.Signal(syscall.Signal(0))
return err == nil
}
// killProcessOS kills a process using OS-specific signals
func killProcessOS(process *os.Process) error {
// First try SIGTERM for graceful shutdown
if err := process.Signal(syscall.SIGTERM); err != nil {
// If SIGTERM fails, try SIGKILL
return process.Signal(syscall.SIGKILL)
}
return nil
}
// setupDaemonCmd configures the command for daemon mode
func setupDaemonCmd(cmd *exec.Cmd) {
cmd.SysProcAttr = getSysProcAttr()
}