mirror of
https://github.com/aljazceru/kata-containers.git
synced 2025-12-22 16:54:25 +01:00
cli: Backtrace on SIGUSR1
Rework the signal handling code so that if debug is enabled and a `SIGUSR1` signal is received, backtrace to the system log but continue to run. Added some basic tests for the signal handling code. Fixes #241. Signed-off-by: James O. D. Hunt <james.o.hunt@intel.com>
This commit is contained in:
20
cli/main.go
20
cli/main.go
@@ -7,6 +7,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
@@ -52,6 +53,8 @@ var kataLog *logrus.Entry
|
||||
// required.
|
||||
var originalLoggerLevel logrus.Level
|
||||
|
||||
var debug = false
|
||||
|
||||
// if true, coredump when an internal error occurs or a fatal signal is received
|
||||
var crashOnError = false
|
||||
|
||||
@@ -156,18 +159,27 @@ func init() {
|
||||
func setupSignalHandler() {
|
||||
sigCh := make(chan os.Signal, 8)
|
||||
|
||||
for _, sig := range fatalSignals() {
|
||||
for _, sig := range handledSignals() {
|
||||
signal.Notify(sigCh, sig)
|
||||
}
|
||||
|
||||
go func() {
|
||||
sig := <-sigCh
|
||||
for {
|
||||
sig := <-sigCh
|
||||
|
||||
nativeSignal, ok := sig.(syscall.Signal)
|
||||
if !ok {
|
||||
err := errors.New("unknown signal")
|
||||
kataLog.WithError(err).WithField("signal", sig.String()).Error()
|
||||
continue
|
||||
}
|
||||
|
||||
nativeSignal, ok := sig.(syscall.Signal)
|
||||
if ok {
|
||||
if fatalSignal(nativeSignal) {
|
||||
kataLog.WithField("signal", sig).Error("received fatal signal")
|
||||
die()
|
||||
} else if debug && nonFatalSignal(nativeSignal) {
|
||||
kataLog.WithField("signal", sig).Debug("handling signal")
|
||||
backtrace()
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
Reference in New Issue
Block a user