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
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:
Vendored
+6
@@ -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"
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user