|
@@ -6,11 +6,14 @@ import (
|
|
|
"cicv-data-closedloop/pji/common/cfg"
|
|
|
"cicv-data-closedloop/pji/common/cutil"
|
|
|
"github.com/bluenviron/goroslib/v2"
|
|
|
+ "os"
|
|
|
+ "os/exec"
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
|
|
|
func BagRecord(nodeName string) {
|
|
|
+ var err error
|
|
|
c_log.GlobalLogger.Info("rosbag record goroutine - 启动")
|
|
|
for {
|
|
|
c_log.GlobalLogger.Info("校验必需的 rosnode 是否全部启动。")
|
|
@@ -36,34 +39,44 @@ func BagRecord(nodeName string) {
|
|
|
|
|
|
|
|
|
|
|
|
- cutil.CreateParentDir(cfg.CloudConfig.BagDataDir)
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- cmd, output, err := util.ExecuteWithDirSync(cfg.CloudConfig.BagDataDir, "/opt/ros/melodic/bin/rosbag", command...)
|
|
|
- if err != nil {
|
|
|
- c_log.GlobalLogger.Error("执行record命令", command, "出错:【output】=", output, "【err】=", err)
|
|
|
- continue
|
|
|
- }
|
|
|
- c_log.GlobalLogger.Info("启动record命令成功。")
|
|
|
- recordProcessPid := cmd.Process.Pid
|
|
|
+ _ = cutil.CreateParentDir(cfg.CloudConfig.BagDataDir)
|
|
|
+ var recordProcessPid int
|
|
|
var recordSubProcessPid int
|
|
|
+ var cmd *exec.Cmd
|
|
|
+ parent:
|
|
|
for {
|
|
|
- time.Sleep(time.Duration(2) * time.Second)
|
|
|
- recordSubProcessPid, err = util.GetSubProcessPid(recordProcessPid)
|
|
|
+ cmd, err = util.ExecuteWithDirAsync(cfg.CloudConfig.BagDataDir, "/opt/ros/melodic/bin/rosbag", command...)
|
|
|
if err != nil {
|
|
|
- c_log.GlobalLogger.Info("正在等待获取进程 ", recordProcessPid, " 的子进程的pid。")
|
|
|
+ c_log.GlobalLogger.Error("执行record命令", command, "出错:", err)
|
|
|
continue
|
|
|
}
|
|
|
- if recordSubProcessPid != 0 {
|
|
|
- c_log.GlobalLogger.Info("获取进程 ", recordProcessPid, " 的子进程的pid:", recordSubProcessPid)
|
|
|
- break
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ recordProcessPid = cmd.Process.Pid
|
|
|
+ sub:
|
|
|
+ for {
|
|
|
+ time.Sleep(time.Duration(2) * time.Second)
|
|
|
+ process, err := os.FindProcess(recordProcessPid)
|
|
|
+ if process == nil {
|
|
|
+ continue parent
|
|
|
+ }
|
|
|
+ recordSubProcessPid, err = util.GetSubProcessPid(recordProcessPid)
|
|
|
+ if err != nil {
|
|
|
+ c_log.GlobalLogger.Info("正在等待获取进程 ", recordProcessPid, " 的子进程的pid。")
|
|
|
+ continue sub
|
|
|
+ }
|
|
|
+ if recordSubProcessPid != 0 {
|
|
|
+ c_log.GlobalLogger.Info("获取进程 ", recordProcessPid, " 的子进程的pid:", recordSubProcessPid)
|
|
|
+ break parent
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- c_log.GlobalLogger.Info("rosbag record goroutine - 等待自杀信号")
|
|
|
+ c_log.GlobalLogger.Info("启动record命令成功。等待自杀信号。")
|
|
|
select {
|
|
|
case signal := <-ChannelKillRosRecord:
|
|
|
if signal == 1 {
|