我想捕获从控制台发送的 Ctrl+C
( SIGINT
) 信号并打印出一些部分运行总计。
原文由 Sebastián Grignoli 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想捕获从控制台发送的 Ctrl+C
( SIGINT
) 信号并打印出一些部分运行总计。
原文由 Sebastián Grignoli 发布,翻译遵循 CC BY-SA 4.0 许可协议
这有效:
package main
import (
"fmt"
"os"
"os/signal"
"syscall"
"time" // or "runtime"
)
func cleanup() {
fmt.Println("cleanup")
}
func main() {
c := make(chan os.Signal)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
cleanup()
os.Exit(1)
}()
for {
fmt.Println("sleeping...")
time.Sleep(10 * time.Second) // or runtime.Gosched() or similar per @misterbee
}
}
在 游乐场 结帐
原文由 user246672 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1.3k 阅读
2 回答1.2k 阅读
2 回答1.2k 阅读
2 回答1.1k 阅读
3 回答784 阅读
2 回答946 阅读
1 回答841 阅读
您可以使用 os/signal 包来处理传入的信号。
Ctrl
+C
是 SIGINT ,所以你可以用它来陷阱os.Interrupt
。使程序终止和打印信息的方式完全取决于您。