Go 为什么我的命令提示符在Ctrl+;C

Go 为什么我的命令提示符在Ctrl+;C,go,Go,我有一个程序,我在其中生成一个goroutine来监视SIGINT,这样我就可以在退出程序之前做一些清理工作。然而,我注意到终端的cmd提示符在Ctrl+C之后立即返回,这意味着大量输出溢出。下面是我看到的代码和示例: sigs:=make(信道操作信号,1) signal.Notify(sigs、syscall.SIGINT、syscall.SIGTERM、os.Interrupt) //生成一个线程以等待sigterm op go func(){ stopContainer(…)是阻塞调用吗

我有一个程序,我在其中生成一个goroutine来监视SIGINT,这样我就可以在退出程序之前做一些清理工作。然而,我注意到终端的cmd提示符在Ctrl+C之后立即返回,这意味着大量输出溢出。下面是我看到的代码和示例:

sigs:=make(信道操作信号,1)
signal.Notify(sigs、syscall.SIGINT、syscall.SIGTERM、os.Interrupt)
//生成一个线程以等待sigterm op
go func(){

stopContainer(…)
是阻塞调用吗?@zerkms是的,换句话说,我生成的go线程将等待
stopContainer()
完成,然后再执行
os.Exit(0)
,但如果这是您的意思,主线程不会被阻塞。@zerkms也是“接收到信号中断,正在停止容器…”字符串打印了两次,我还发现,如果你有机会收到多个信号呢?如果你增加通道缓冲区怎么办?@zerkms不理会最后一条评论,它不会打印两次输出,但输出肯定会溢出命令提示符。在程序停止之前,命令提示符是如何返回的,这让我很困惑将输出初始化到stdout.is
stopContainer(…)
是一个阻塞调用吗?@zerkms是的,换句话说,我生成的go线程将等待
stopContainer()
完成,然后再执行
os.Exit(0)
,但如果这是您的意思,则主线程不会被阻塞。@zerkms也是“收到信号中断,正在停止容器。。。"字符串打印了两次,我还发现,如果你有机会收到多个信号呢?如果你增加通道缓冲区怎么办?@zerkms不理会最后一条评论,它不会打印两次输出,但输出肯定会溢出命令提示符。在程序停止之前,命令提示符是如何返回的,这让我很困惑将输出初始化为标准输出。
^CReceived a signal interrupt, stopping container
Received a signal interrupt, stopping container

mbp:myDir myName$ Stopping the 'javaTest-tools' container...
Stopping the 'javaTest-tools' container...

Build time: 3m31.275495945s
Done.