Files
pmg/cmd/proxy/stop.go
T

50 lines
1.2 KiB
Go
Raw Normal View History

package proxy
import (
"fmt"
"os"
"syscall"
"github.com/safedep/pmg/config"
"github.com/safedep/pmg/internal/proxystate"
"github.com/spf13/cobra"
)
func newStopCommand() *cobra.Command {
return &cobra.Command{
Use: "stop",
Short: "Stop the running persistent PMG proxy server",
RunE: runStop,
}
}
func runStop(_ *cobra.Command, _ []string) error {
cfg := config.Get()
statePath := proxystate.StatePath(cfg.ConfigDir())
state, err := proxystate.Read(statePath)
if err != nil {
return fmt.Errorf("no proxy state found — is the proxy running? (%w)", err)
}
if !state.IsRunning() {
_ = proxystate.Remove(statePath)
return fmt.Errorf("proxy process (pid %d) is not running; state file cleaned up", state.PID)
}
proc, err := os.FindProcess(state.PID)
if err != nil {
return fmt.Errorf("find proxy process (pid %d): %w", state.PID, err)
}
if err := proc.Signal(syscall.SIGTERM); err != nil {
return fmt.Errorf("send SIGTERM to proxy (pid %d): %w", state.PID, err)
}
if _, err := fmt.Fprintf(os.Stdout, "Sent SIGTERM to PMG proxy (pid %d, addr %s)\n", state.PID, state.Addr); err != nil {
return fmt.Errorf("write stop message: %w", err)
}
return nil
}