123456789101112131415161718192021222324252627282930313233343536373839 |
- //go:build !windows
- package lifecycle
- import (
- "context"
- "errors"
- "fmt"
- "os"
- "os/exec"
- "syscall"
- )
- func getCmd(ctx context.Context, cmd string) *exec.Cmd {
- return exec.CommandContext(ctx, cmd, "serve")
- }
- func terminate(cmd *exec.Cmd) error {
- return cmd.Process.Signal(os.Interrupt)
- }
- func isProcessExited(pid int) (bool, error) {
- proc, err := os.FindProcess(pid)
- if err != nil {
- return false, fmt.Errorf("failed to find process: %v", err)
- }
- err = proc.Signal(syscall.Signal(0))
- if err != nil {
- if errors.Is(err, os.ErrProcessDone) || errors.Is(err, syscall.ESRCH) {
- return true, nil
- }
- return false, fmt.Errorf("error signaling process: %v", err)
- }
- return false, nil
- }
|