Files
beads/internal/daemon/kill_windows.go

49 lines
1.1 KiB
Go

//go:build windows
package daemon
import (
"bytes"
"fmt"
"os/exec"
"strconv"
"strings"
)
func killProcess(pid int) error {
// Use taskkill on Windows (without /F for graceful)
cmd := exec.Command("taskkill", "/PID", strconv.Itoa(pid))
if err := cmd.Run(); err != nil {
return fmt.Errorf("failed to kill PID %d: %w", pid, err)
}
return nil
}
func forceKillProcess(pid int) error {
// Use taskkill with /F flag for force kill
cmd := exec.Command("taskkill", "/PID", strconv.Itoa(pid), "/F")
if err := cmd.Run(); err != nil {
return fmt.Errorf("failed to force kill PID %d: %w", pid, err)
}
return nil
}
func isProcessAlive(pid int) bool {
// Use tasklist to check if process exists
cmd := exec.Command("tasklist", "/FI", fmt.Sprintf("PID eq %d", pid), "/NH")
output, err := cmd.Output()
if err != nil {
return false
}
// Check if output contains the PID
return contains(string(output), strconv.Itoa(pid))
}
func contains(s, substr string) bool {
return findSubstring(s, substr)
}
func findSubstring(s, substr string) bool {
return len(s) >= len(substr) && bytes.Contains([]byte(s), []byte(substr))
}