如何在golang上获取gocmq中断信号?
**我使用goczmq,但在Windwos上运行服务器时,我不会捕捉到系统中断。为什么?**如何在golang上获取gocmq中断信号?,go,Go,**我使用goczmq,但在Windwos上运行服务器时,我不会捕捉到系统中断。为什么?** signal_channel := make(chan os.Signal) signal.Notify(signal_channel) go goczmq.... <-signal_channel signal\u信道:=make(信道信号) 信号通知(信号通道) 去吧。。。。 我做了一个快速的例子,似乎工作的预期 在a.go中有代码: package main import ( "os"
signal_channel := make(chan os.Signal)
signal.Notify(signal_channel)
go goczmq....
<-signal_channel
signal\u信道:=make(信道信号)
信号通知(信号通道)
去吧。。。。
我做了一个快速的例子,似乎工作的预期
在a.go中有代码
:
package main
import (
"os"
"os/signal"
"time"
"fmt"
)
func main() {
fmt.Println( "Started...")
signal_channel := make(chan os.Signal)
signal.Notify(signal_channel)
go func() {
// do whatever...
time.Sleep(10 *time.Second)
}()
sig1 := <-signal_channel
fmt.Println( "\n\nGot signal: ", sig1 )
fmt.Println( "Done.")
}
此外:
go run a.go // + Press CTRL-Z
Started...
^Z
[1]+ Stopped go run a.go
Got signal: stopped
Done.
及
如果在你的情况下,它是不可见的,可能是消耗在gorutine。
例如:
package main
import (
"os"
"os/signal"
"time"
"fmt"
)
func main() {
fmt.Println( "Started...")
signal_channel := make(chan os.Signal)
signal.Notify(signal_channel)
go func() {
// do whatever...
sig2 := <-signal_channel
fmt.Println( "gorutine sig2: ", sig2)
time.Sleep(10 *time.Second)
}()
time.Sleep(10 *time.Second)
sig1 := <-signal_channel
fmt.Println( "\n\nGot signal: ", sig1 )
fmt.Println( "Done.")
}
谢谢,回复。但我将goczmq添加到示例中,它不适用于Windwos
> go run a.go // + Press CTRL-C
Started...
^C
Got signal: interrupt
Done.
package main
import (
"os"
"os/signal"
"time"
"fmt"
)
func main() {
fmt.Println( "Started...")
signal_channel := make(chan os.Signal)
signal.Notify(signal_channel)
go func() {
// do whatever...
sig2 := <-signal_channel
fmt.Println( "gorutine sig2: ", sig2)
time.Sleep(10 *time.Second)
}()
time.Sleep(10 *time.Second)
sig1 := <-signal_channel
fmt.Println( "\n\nGot signal: ", sig1 )
fmt.Println( "Done.")
}
^Cgorutine sig2: interrupt