aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--cmd/dist/comp/_hakurei6
-rw-r--r--cmd/hakurei/command.go18
-rw-r--r--cmd/hakurei/command_test.go1
3 files changed, 25 insertions, 0 deletions
diff --git a/cmd/dist/comp/_hakurei b/cmd/dist/comp/_hakurei
index 11424612..6580878c 100644
--- a/cmd/dist/comp/_hakurei
+++ b/cmd/dist/comp/_hakurei
@@ -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"
diff --git a/cmd/hakurei/command.go b/cmd/hakurei/command.go
index 12bf027a..374d521c 100644
--- a/cmd/hakurei/command.go
+++ b/cmd/hakurei/command.go
@@ -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 {
diff --git a/cmd/hakurei/command_test.go b/cmd/hakurei/command_test.go
index 61374cd8..059e18b1 100644
--- a/cmd/hakurei/command_test.go
+++ b/cmd/hakurei/command_test.go
@@ -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