孟令鑫 hace 1 año
padre
commit
e95669ecac

+ 42 - 0
common/util/u_exec.go

@@ -0,0 +1,42 @@
+package util
+
+import (
+	"os/exec"
+)
+
+func GetSubProcessPid(pid string) (string, error) {
+	pgrepCmd := exec.Command("pgrep", "-P", pid)
+	output, err := pgrepCmd.CombinedOutput()
+	if err != nil {
+		return "", err
+	}
+	return string(output), nil
+}
+
+func ExecuteWithPath(path string, name string, arg ...string) (*exec.Cmd, error) {
+	// 创建一个Cmd对象,表示要执行的命令
+	cmd := exec.Command(name, arg...)
+	// 指定目录
+	cmd.Dir = path
+	err := cmd.Start()
+	if err != nil {
+		return nil, err
+	} else {
+		// 执行命令并等待它完成d
+		return cmd, nil
+	}
+
+}
+
+func KillProcessByPID(pid string) (*exec.Cmd, string, error) {
+	return Execute("kill", "-9", pid)
+}
+
+func Execute(name string, arg ...string) (*exec.Cmd, string, error) {
+	cmd := exec.Command(name, arg...)
+	combinedOutput, err := cmd.CombinedOutput()
+	if err != nil {
+		return nil, "", err
+	}
+	return cmd, string(combinedOutput), nil
+}

+ 7 - 8
kinglong/common/svc/rosbag_record.go

@@ -1,12 +1,11 @@
 package svc
 
 import (
+	"cicv-data-closedloop/common/util"
 	cfg2 "cicv-data-closedloop/kinglong/common/cfg"
 	"cicv-data-closedloop/kinglong/common/cutil"
 	"cicv-data-closedloop/kinglong/common/log"
-	"cicv-data-closedloop/kinglong/common/util"
 	"github.com/bluenviron/goroslib/v2"
-	"os"
 	"strconv"
 	"time"
 )
@@ -65,15 +64,15 @@ func BagRecord(nodeName string) {
 		select {
 		case signal := <-ChannelKillRosRecord:
 			if signal == 1 {
-				err = cmd.Process.Kill()
+				_, output, err := util.KillProcessByPID(recordSubProcessPid)
 				if err != nil {
-					log.GlobalLogger.Error("程序崩溃,杀死record命令进程", recordProcessPid, "出错:", err)
-					os.Exit(-1)
+					log.GlobalLogger.Errorf("程序阻塞,杀死record命令子进程出错,【pid】=%v,【output】=%v,【err】=%v。", recordSubProcessPid, output, err)
+					select {} // 此处阻塞防止record命令一直录包占满存储
 				}
-				err = util.KillProcessByPID(recordSubProcessPid)
+				err = cmd.Process.Kill()
 				if err != nil {
-					log.GlobalLogger.Error("程序崩溃,杀死record命令子进程", recordSubProcessPid, "出错:", err)
-					os.Exit(-1)
+					log.GlobalLogger.Error("程序阻塞,杀死record命令父进程", recordProcessPid, "出错:", err)
+					select {} // 此处阻塞防止record命令一直录包占满存储
 				}
 				AddKillTimes("1")
 				return

+ 7 - 8
pji/common/svc/rosbag_record.go

@@ -2,11 +2,10 @@ package svc
 
 import (
 	"cicv-data-closedloop/common/config/c_log"
+	"cicv-data-closedloop/common/util"
 	"cicv-data-closedloop/pji/common/cfg"
 	"cicv-data-closedloop/pji/common/cutil"
-	"cicv-data-closedloop/pji/common/util"
 	"github.com/bluenviron/goroslib/v2"
-	"os"
 	"strconv"
 	"time"
 )
@@ -64,15 +63,15 @@ func BagRecord(nodeName string) {
 		select {
 		case signal := <-ChannelKillRosRecord:
 			if signal == 1 {
-				err = cmd.Process.Kill()
+				_, output, err := util.KillProcessByPID(recordSubProcessPid)
 				if err != nil {
-					c_log.GlobalLogger.Error("程序崩溃,杀死record命令进程", recordProcessPid, "出错:", err)
-					os.Exit(-1)
+					c_log.GlobalLogger.Errorf("程序阻塞,杀死record命令子进程出错,【pid】=%v,【output】=%v,【err】=%v。", recordSubProcessPid, output, err)
+					select {} // 此处阻塞防止record命令一直录包占满存储
 				}
-				err = util.KillProcessByPID(recordSubProcessPid)
+				err = cmd.Process.Kill()
 				if err != nil {
-					c_log.GlobalLogger.Error("程序崩溃,杀死record命令子进程", recordSubProcessPid, "出错:", err)
-					os.Exit(-1)
+					c_log.GlobalLogger.Error("程序阻塞,杀死record命令进程", recordProcessPid, "出错:", err)
+					select {} // 此处阻塞防止record命令一直录包占满存储
 				}
 				AddKillTimes("1")
 				return

+ 1 - 18
pji/common/util/util_exec.go

@@ -4,15 +4,6 @@ import (
 	"os/exec"
 )
 
-func GetSubProcessPid(pid string) (string, error) {
-	pgrepCmd := exec.Command("pgrep", "-P", pid)
-	output, err := pgrepCmd.CombinedOutput()
-	if err != nil {
-		return "", err
-	}
-	return string(output), nil
-}
-
 func ExecuteWithPath(path string, name string, arg ...string) (*exec.Cmd, error) {
 	// 创建一个Cmd对象,表示要执行的命令
 	cmd := exec.Command(name, arg...)
@@ -27,6 +18,7 @@ func ExecuteWithPath(path string, name string, arg ...string) (*exec.Cmd, error)
 	}
 
 }
+
 func Execute(name string, arg ...string) (*exec.Cmd, string, error) {
 	cmd := exec.Command(name, arg...)
 	combinedOutput, err := cmd.CombinedOutput()
@@ -35,12 +27,3 @@ func Execute(name string, arg ...string) (*exec.Cmd, string, error) {
 	}
 	return cmd, string(combinedOutput), nil
 }
-
-func KillProcessByPID(pid string) error {
-	cmd := exec.Command("kill", "-9", pid)
-	err := cmd.Run()
-	if err != nil {
-		return err
-	}
-	return nil
-}