* app: gracefully shut down `ollama serve` on windows * fix linter errors * bring back `HideWindow` * remove creation flags * restore `windows.CREATE_NEW_PROCESS_GROUP`
		
			
				
	
	
		
			39 lines
		
	
	
		
			702 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			702 B
		
	
	
	
		
			Go
		
	
	
	
	
	
//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
 | 
						|
}
 |