提交 a9377ea8 编写于 作者: W WithLin

fix add signal

上级 c4245898
...@@ -21,10 +21,8 @@ import ( ...@@ -21,10 +21,8 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
"os/signal"
"path/filepath" "path/filepath"
"strings" "strings"
"syscall"
"github.com/XiaoMi/soar/advisor" "github.com/XiaoMi/soar/advisor"
"github.com/XiaoMi/soar/ast" "github.com/XiaoMi/soar/ast"
...@@ -53,15 +51,6 @@ func main() { ...@@ -53,15 +51,6 @@ func main() {
} }
common.BaseDir = filepath.Dir(ex) // binary文件所在路径 common.BaseDir = filepath.Dir(ex) // binary文件所在路径
sc := make(chan os.Signal, 1)
signal.Notify(sc,
os.Kill,
os.Interrupt,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT) //通过信号量的形式让程序优雅退出并且清理测试环境
// 配置文件&命令行参数解析 // 配置文件&命令行参数解析
err = common.ParseConfig("") err = common.ParseConfig("")
common.LogIfWarn(err, "") common.LogIfWarn(err, "")
...@@ -102,17 +91,12 @@ func main() { ...@@ -102,17 +91,12 @@ func main() {
defer vEnv.CleanUp() defer vEnv.CleanUp()
} }
go func() { //当程序卡死的时候,或者由于某些原因程序没有退出,可以通过捕获信号量的形式让程序优雅退出并且清理测试环境
go common.SignalNotify(func() {
select { if common.Config.DropTestTemporary {
case n := <-sc: vEnv.CleanUp()
common.Log.Info("receive signal %v, closing", n)
// 如果使用到测试环境,在这里环境清理
if common.Config.DropTestTemporary {
vEnv.CleanUp()
}
} }
}() })
// 对指定的库表进行索引重复检查 // 对指定的库表进行索引重复检查
if common.Config.ReportType == "duplicate-key-checker" { if common.Config.ReportType == "duplicate-key-checker" {
......
/*
* Copyright 2018 Xiaomi, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package common
import (
"os"
"os/signal"
"syscall"
)
//当程序卡死的时候,或者由于某些原因程序没有退出,可以通过捕获信号量的形式让程序优雅退出并且清理测试环境
func SignalNotify(f func()) {
sc := make(chan os.Signal, 1)
signal.Notify(sc,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT)
go func() {
select {
case n := <-sc:
Log.Info("receive signal %v, closing", n)
f()
}
}()
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册