Files
kandev/apps/backend/internal/agentctl/server/process/process_signal_unix.go
T
Carlos Florêncio cad2d783b3
release / build-web (push) Has been cancelled
release / build-bundles (aarch64-linux-gnu-gcc, arm64, linux, ubuntu-latest, linux-arm64) (push) Has been cancelled
release / build-bundles (amd64, darwin, macos-13, macos-x64) (push) Has been cancelled
release / build-bundles (amd64, linux, ubuntu-latest, linux-x64) (push) Has been cancelled
release / build-bundles (amd64, windows, windows-latest, windows-x64) (push) Has been cancelled
release / build-bundles (arm64, darwin, macos-14, macos-arm64) (push) Has been cancelled
feat: improve windows support (#225)
feat: windows support
2026-02-15 18:16:21 +00:00

36 lines
845 B
Go

//go:build !windows
package process
import (
"os"
"os/exec"
"syscall"
)
// terminateProcess sends SIGTERM to the process for graceful shutdown.
func terminateProcess(p *os.Process) error {
return p.Signal(syscall.SIGTERM)
}
// waitPtyProcess waits for the PTY process to exit and returns exit info.
// On Unix, uses cmd.Wait() which inspects WaitStatus for signal information.
func waitPtyProcess(cmd *exec.Cmd, _ PtyHandle) (exitCode int, signalName string, err error) {
err = cmd.Wait()
if err == nil {
return 0, "", nil
}
exitErr, ok := err.(*exec.ExitError)
if !ok {
return 1, "", err
}
waitStatus, ok := exitErr.Sys().(syscall.WaitStatus)
if !ok {
return 1, "", err
}
if waitStatus.Signaled() {
return 128 + int(waitStatus.Signal()), waitStatus.Signal().String(), err
}
return waitStatus.ExitStatus(), "", err
}