|
@@ -15,6 +15,7 @@ func BagRecord(nodeName string) {
|
|
|
var err error
|
|
|
c_log.GlobalLogger.Info("rosbag record goroutine - 启动")
|
|
|
for {
|
|
|
+ startRecord:
|
|
|
c_log.GlobalLogger.Info("校验必需的 rosnode 是否全部启动。")
|
|
|
canRecord := false
|
|
|
for !canRecord {
|
|
@@ -76,39 +77,28 @@ func BagRecord(nodeName string) {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // 等待自杀信号
|
|
|
- c_log.GlobalLogger.Info("启动record命令成功。等待自杀信号。")
|
|
|
- select {
|
|
|
- case signal := <-ChannelKillRosRecord:
|
|
|
- if signal == 1 {
|
|
|
- if err := util.KillProcessByPid(recordSubProcessPid); err != nil {
|
|
|
- c_log.GlobalLogger.Errorf("程序阻塞,杀死record命令子进程出错,【pid】=%v,【err】=%v。", recordSubProcessPid, err)
|
|
|
- select {} // 此处阻塞防止record命令一直录包占满存储
|
|
|
+ // 等待进程关闭信号
|
|
|
+ c_log.GlobalLogger.Info("启动record命令成功。等待进程关闭信号。")
|
|
|
+ for {
|
|
|
+ select {
|
|
|
+ case signal := <-ChannelKillRosRecord:
|
|
|
+ if signal == 1 {
|
|
|
+ if err := util.KillProcessByPid(recordSubProcessPid); err != nil {
|
|
|
+ c_log.GlobalLogger.Errorf("程序阻塞,杀死record命令子进程出错,【pid】=%v,【err】=%v。", recordSubProcessPid, err)
|
|
|
+ select {} // 此处阻塞防止record命令一直录包占满存储
|
|
|
+ }
|
|
|
+ if err = cmd.Process.Kill(); err != nil {
|
|
|
+ c_log.GlobalLogger.Error("程序阻塞,杀死record命令进程", recordProcessPid, "出错:", err)
|
|
|
+ select {} // 此处阻塞防止record命令一直录包占满存储
|
|
|
+ }
|
|
|
+ AddKillTimes("1")
|
|
|
+ continue // continue 是为了等待重启信号
|
|
|
}
|
|
|
- if err = cmd.Process.Kill(); err != nil {
|
|
|
- c_log.GlobalLogger.Error("程序阻塞,杀死record命令进程", recordProcessPid, "出错:", err)
|
|
|
- select {} // 此处阻塞防止record命令一直录包占满存储
|
|
|
+ if signal == 2 {
|
|
|
+ continue startRecord // 收到信号 2 重新 record 命令
|
|
|
}
|
|
|
- AddKillTimes("1")
|
|
|
- return
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // TODO 暂时不放开该逻辑。如果监控rosnode来判断是否杀死record,太麻烦,生成窗口的线程也需要关闭
|
|
|
- //{
|
|
|
- // commonCfg.GlobalLogger.Info("正在监控rosnode是否全部关闭。")
|
|
|
- // for canRecord {
|
|
|
- // time.Sleep(time.Duration(1) * time.Second)
|
|
|
- // canRecord = isCanRecord(commonCfg.RosNode)
|
|
|
- // }
|
|
|
- // commonCfg.GlobalLogger.Info("rosnode已全部关闭,正在结束record进程。")
|
|
|
- //
|
|
|
- // err = cmd.Process.Kill()
|
|
|
- // if err != nil {
|
|
|
- // commonCfg.GlobalLogger.Error("杀死record进程错误:", err)
|
|
|
- // continue
|
|
|
- // }
|
|
|
- //}
|
|
|
}
|
|
|
}
|
|
|
|