** I use goczmq, but I don't catch system interrupt when run server on Windwos. Why?**
signal_channel := make(chan os.Signal)
signal.Notify(signal_channel)
go goczmq....
<-signal_channel
** I use goczmq, but I don't catch system interrupt when run server on Windwos. Why?**
signal_channel := make(chan os.Signal)
signal.Notify(signal_channel)
go goczmq....
<-signal_channel
I did a quick example and seems to work as expected.
Having code in 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( "
Got signal: ", sig1 )
fmt.Println( "Done.")
}
and
> go run a.go &
[1] 26515
Started...
>kill -HUP %1
Got signal: hangup
Done.
> go run a.go &
[1] 26768
> Started...
kill -USR1 %1
Got signal: user defined signal 1
Also:
go run a.go // + Press CTRL-Z
Started...
^Z
[1]+ Stopped go run a.go
Got signal: stopped
Done.
and
> go run a.go // + Press CTRL-C
Started...
^C
Got signal: interrupt
Done.
If in your case it is not visible maybe it is consumed in gorutine. Like in:
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( "
Got signal: ", sig1 )
fmt.Println( "Done.")
}
which gets:
go run a.go Started...
^Cgorutine sig2: interrupt