diff --git a/plugin/common/init.go b/plugin/common/init.go
index <HASH>..<HASH> 100644
--- a/plugin/common/init.go
+++ b/plugin/common/init.go
@@ -137,6 +137,7 @@ func (p *HashicorpPlugin) Call(funcName string, args ...interface{}) (interface{
 
 func (p *HashicorpPlugin) Quit() error {
 	// kill hashicorp plugin process
+	log.Warn().Msg("quit hashicorp plugin process")
 	pluginHost.Quit()
 	return nil
 }
diff --git a/runner.go b/runner.go
index <HASH>..<HASH> 100644
--- a/runner.go
+++ b/runner.go
@@ -9,8 +9,11 @@ import (
 	"net/http"
 	"net/http/httputil"
 	"net/url"
+	"os"
+	"os/signal"
 	"strconv"
 	"strings"
+	"syscall"
 	"testing"
 	"time"
 
@@ -213,6 +216,18 @@ func initPlugin(path string) (plugin common.Plugin, err error) {
 		go ga.SendEvent(event)
 	}()
 	plugin, err = common.Init(path)
+
+	// catch Interrupt and SIGTERM signals to ensure plugin quitted
+	c := make(chan os.Signal)
+	signal.Notify(c, os.Interrupt, syscall.SIGTERM)
+	go func() {
+		<-c
+		if plugin != nil {
+			plugin.Quit()
+		}
+		os.Exit(1)
+	}()
+
 	return
 }
feat: catch Interrupt and SIGTERM signals to ensure plugin quitted