Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
终止进程:上下文取消和终止信号之间的差异 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 - Fatal编程技术网

终止进程:上下文取消和终止信号之间的差异 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