From 12fe2d6ab665cda87e858cbc984b54517893fbde Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Mon, 22 Sep 2014 17:44:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9D=9F=E8=BF=90=E8=A1=8C=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 1 + output/outputs.go | 26 ++++++++++++++++++++++++++ output/processes.go | 2 ++ 3 files changed, 29 insertions(+) diff --git a/main.go b/main.go index 8ff0f3c..40eff3b 100644 --- a/main.go +++ b/main.go @@ -162,6 +162,7 @@ func main() { // 运行相关 http.HandleFunc("/build", output.BuildHandler) http.HandleFunc("/run", output.RunHandler) + http.HandleFunc("/stop", output.StopHandler) http.HandleFunc("/go/get", output.GoGetHandler) http.HandleFunc("/go/install", output.GoInstallHandler) http.HandleFunc("/output/ws", output.WSHandler) diff --git a/output/outputs.go b/output/outputs.go index df7ea82..cda1fe5 100644 --- a/output/outputs.go +++ b/output/outputs.go @@ -520,6 +520,32 @@ func GoGetHandler(w http.ResponseWriter, r *http.Request) { }(rand.Int()) } +// 结束正在运行的进程. +func StopHandler(w http.ResponseWriter, r *http.Request) { + data := map[string]interface{}{"succ": true} + defer util.RetJSON(w, r, data) + + var args map[string]interface{} + if err := json.NewDecoder(r.Body).Decode(&args); err != nil { + glog.Error(err) + data["succ"] = false + + return + } + + sid := args["sid"].(string) + pid := args["pid"].(int) + + wSession := session.WideSessions.Get(sid) + if nil == wSession { + data["succ"] = false + + return + } + + processes.kill(wSession, pid) +} + func setCmdEnv(cmd *exec.Cmd, username string) { userWorkspace := conf.Wide.GetUserWorkspace(username) diff --git a/output/processes.go b/output/processes.go index fa96311..38f5c7b 100644 --- a/output/processes.go +++ b/output/processes.go @@ -83,6 +83,8 @@ func (procs *procs) kill(wSession *session.WideSession, pid int) { glog.V(3).Infof("Killed a process [pid=%d] of session [%s]", pid, sid) } + + return } } }