You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Unstoppable program: CSignal: interrupt not received #358
I am trying to run a Golang http server through python but then the program cannot be stopped.
I tried to send SIGTERM(ctrl+c)/SIGKILL(ctrl+d) signals from the terminal but it didn't work.
Sending the signal from another terminal works.
NOTE: The example in the README.md says to first enter out folder, but the import does not work from inside the out folder
Run the test
python3 test.py
Then try to stop the process with ctrl+c (NOTE: this interrupt signal works fine if the Go code is compiled as a regular binary and not for the binding)
Workaround
A workaround is to run the server in a goroutine while the main thread block until it receives the signal:
funcRun() {
server:=&http.Server{
Addr: ":8080",
Handler: http.DefaultServeMux,
}
http.HandleFunc("/", helloHandler)
// Channel to listen for OS signalsstop:=make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt, syscall.SIGTERM)
gofunc() {
iferr:=server.ListenAndServe(); err!=nil&&err!=http.ErrServerClosed {
fmt.Printf("ListenAndServe(): %s\n", err)
}
}()
fmt.Println("Server is ready to handle requests at :8080")
<-stop// Block until we receive a signalfmt.Println("Shutting down the server...")
ctx, cancel:=context.WithTimeout(context.Background(), 5*time.Second)
defercancel()
iferr:=server.Shutdown(ctx); err!=nil {
fmt.Printf("Server Shutdown Failed:%+v", err)
}
fmt.Println("Server stopped")
}
Activity