cmd/hakurei: terminate specified instance
Test / Create distribution (push) Successful in 59s
Test / Sandbox (push) Successful in 2m55s
Test / Hakurei (push) Successful in 4m56s
Test / Sandbox (race detector) (push) Successful in 6m7s
Test / Hakurei (race detector) (push) Successful in 7m20s
Test / ShareFS (push) Successful in 7m35s
Test / Flake checks (push) Successful in 1m7s

This is theoretically susceptible to the PID race, but such an event is statistically impossible, and not exploitable in the intended use case, regardless.

Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
cat
2026-08-12 18:03:54 +09:00
parent 3718c044c4
commit 1bc16b51a6
3 changed files with 25 additions and 0 deletions
+6
View File
@@ -36,6 +36,11 @@ _hakurei_show() {
'files:files:__hakurei_files'
}
_hakurei_kill() {
_alternative \
'instances:domains:__hakurei_instances'
}
__hakurei_files() {
_files -g "*.(json|hakurei)"
return $?
@@ -60,6 +65,7 @@ __hakurei_instances() {
"run:Load and start container from configuration file"
"exec:Configure and start a permissive container"
"show:Show live or local instance configuration"
"kill:Terminate an active instance"
"ps:List active instances"
"version:Display version information"
"license:Show full license text"
+18
View File
@@ -11,6 +11,7 @@ import (
"os/user"
"strconv"
"sync"
"syscall"
"time"
"hakurei.app/check"
@@ -372,6 +373,23 @@ func buildCommand(ctx context.Context, msg message.Msg, early *earlyHardeningErr
Flag(&flagNoStore, "no-store", command.BoolFlag(false), "Do not attempt to match from active instances")
}
c.NewCommand("kill", "Terminate an active instance", func(args []string) error {
if len(args) != 1 {
log.Fatal("kill requires 1 argument")
}
var sc hst.Paths
env.CopyPaths().Copy(&sc, new(outcome.Hsu).MustID(nil))
entry := tryIdentifier(msg, args[0], outcome.NewStore(&sc))
if entry == nil {
log.Fatalf("%q does not match any active instance", args[0])
}
if err := syscall.Kill(entry.PID, syscall.SIGTERM); err != nil {
log.Fatalf("cannot terminate %s: %v", entry.ID.String(), err)
}
return errSuccess
})
{
var flagShort bool
c.NewCommand("ps", "List active instances", func(args []string) error {
+1
View File
@@ -25,6 +25,7 @@ commands:
run Load and start container from configuration file
exec Configure and start a permissive container
show Show live or local instance configuration
kill Terminate an active instance
ps List active instances
version Display version information
license Show full license text