//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
}