终止进程:上下文取消和终止信号之间的差异 func main(){ ctx,cancel:=context.WithCancel(context.Background()) cmd:=exec.CommandContext(ctx,“睡眠”,“1000”) go func(){ 时间。睡眠(2*时间。秒) //命令进程信号(os.Kill) //指令处理信号(操作系统中断) 取消 }() 如果错误:=cmd.Run();错误!=nil{ fmt.Println(err.Error()) } fmt.Println(“精加工…”) }
终止进程:上下文取消和终止信号之间的差异 func main(){ ctx,cancel:=context.WithCancel(context.Background()) cmd:=exec.CommandContext(ctx,“睡眠”,“1000”) go func(){ 时间。睡眠(2*时间。秒) //命令进程信号(os.Kill) //指令处理信号(操作系统中断) 取消 }() 如果错误:=cmd.Run();错误!=nil{ fmt.Println(err.Error()) } fmt.Println(“精加工…”) },go,Go,cancel和Signal(os.Kill)之间有什么区别吗?它们会导致相同的错误 如何区分终止信号和由于错误而终止?只有通过检查err.Error()=“signal:killed”?的文档才能为您提供此问题的答案: 如果上下文在命令自行完成之前完成,则提供的上下文用于终止进程(通过调用os.process.kill) 依次调用特定于操作系统的kill()函数,该函数用于: func(p*进程)kill()错误{ 返回p.信号(终止) } 因此,两者最终都会调用信号(os.Kill) 至于如
cancel
和Signal(os.Kill)
之间有什么区别吗?它们会导致相同的错误
如何区分终止信号和由于错误而终止?只有通过检查err.Error()=“signal:killed”?的文档才能为您提供此问题的答案:
如果上下文在命令自行完成之前完成,则提供的上下文用于终止进程(通过调用os.process.kill)
依次调用特定于操作系统的kill()
函数,该函数用于:
func(p*进程)kill()错误{
返回p.信号(终止)
}
因此,两者最终都会调用信号(os.Kill)
至于如何区别,你有两个基本选择:
- 分析可能很脆弱的错误(尽管对
进行直接检查并不太糟糕)信号:killed
- 检查退出代码,当被
SIGKILL