【发布时间】:2020-05-04 14:29:31
【问题描述】:
我有以下设置:
func startsMain (){
go main ()
}
fun stopMain (){
//kill main
}
func main() {
//infinite loop
}
我正在创建黄瓜步骤,我需要能够启动和关闭应用程序。
【问题讨论】:
-
你不能从“外部”停止一个 goroutine。 goroutine 必须支持某种终止信号(通常是通道)。但如果它没有,你就不能强迫它或杀死它。 cancel a blocking operation in Go 的可能重复项。
-
你不能简单地杀死一个goroutine;请举例说明您要解决的问题。
-
@icza,是否可以使用任何其他方式而不是 goroutine 来启动和停止 main ?
-
@Michael:
main由运行时在主包中隐式调用。你不能自己称呼它。 -
我的意思是,如果你想从外部停止 main(),你总是可以调用类似 os.Exit() 的方法。这通过杀死整个应用程序来杀死 main,甚至可以从“main”goroutine 之外调用。如果你想停止主协程但让其他协程保持活动状态,你只能在主协程(但不一定是 main() 函数本身)中使用
runtime.Goexit()执行此操作,尽管这有辅助副作用(就像如果所有其他 goroutine 也退出,应用程序就会崩溃)。