请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

不确定超时有没有得到控制

老师 超时处理代码:

func (e *Executor) JobOvertimeHandle(result *basics.JobExecuteResult) {
	go func(result *basics.JobExecuteResult) {
		//获取当前时间
		var(
			seconds time.Duration
			overtime time.Time
		)
		//格式化时间
		seconds , _ = time.ParseDuration("-" + strconv.FormatInt(result.ExecuteInfo.Job.Overtime , 10))
		for {
			//超时时间
			overtime = result.StartTime.Add(seconds)
			//如果超时时间大于或等于当前时间  退出当前进程
			if overtime.Before(result.StartTime) ||  overtime.Equal(result.StartTime){
				result.ExecuteInfo.CancelFunc()	//触发command杀死shell子进程, 任务得到退出
				return
			}

			time.Sleep(1 * time.Second)
		}
	}(result)
}

结果:
执行任务: job1 2019-11-11 04:28:48 +0800 CST 2019-11-11 04:28:48.0000114 +0800 CST m=+0.889000001
执行任务: job3 2019-11-11 04:28:48 +0800 CST 2019-11-11 04:28:48.0000114 +0800 CST m=+0.889000001
任务执行完成: job3  context canceled
任务执行完成: job1  context canceled
执行任务: job3 2019-11-11 04:28:51 +0800 CST 2019-11-11 04:28:51.0000114 +0800 CST m=+3.889000001
执行任务: job1 2019-11-11 04:28:51 +0800 CST 2019-11-11 04:28:51.0000114 +0800 CST m=+3.889000001
任务执行完成: job3  context canceled
任务执行完成: job1  context canceled
执行任务: job1 2019-11-11 04:28:54 +0800 CST 2019-11-11 04:28:54.0000114 +0800 CST m=+6.889000001
执行任务: job3 2019-11-11 04:28:54 +0800 CST 2019-11-11 04:28:54.0000114 +0800 CST m=+6.889000001
任务执行完成: job3  context canceled
任务执行完成: job1  context canceled

老师这是超时终止的结果吗?

正在回答 回答被采纳积分+3

1回答

小鱼儿老师 2019-11-15 10:01:34

嗯,context canceled就是因为我们在循环中判定任务已经超时了,所以主动调用了cancelFunc(),导致正在执行的Command子进程被杀死。

0 回复 有任何疑惑可以回复我~
  • 这里能不能不用CancelFunc来杀死进程,直接给CancelCtx设置超时时间可以吗?   还有这里需要区分超时和主动杀死进程的区别,都用cancelfunc怎么区分?
    回复 有任何疑惑可以回复我~ 2020-12-22 15:10:33
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信