internal/platform/process/init.go (29 lines of code) (raw):
package process
import (
"io"
"log"
"os"
"os/signal"
"syscall"
"time"
"github.com/JetBrains/qodana-cli/internal/core"
"github.com/JetBrains/qodana-cli/internal/platform/commoncontext"
"github.com/JetBrains/qodana-cli/internal/platform/msg"
"github.com/JetBrains/qodana-cli/internal/platform/version"
)
// Init runs miscellaneous process-wide utility code.
func Init() {
KillProcessTreeOnClose()
commoncontext.InterruptChannel = make(chan os.Signal, 1)
signal.Notify(commoncontext.InterruptChannel, os.Interrupt)
signal.Notify(commoncontext.InterruptChannel, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-commoncontext.InterruptChannel
msg.WarningMessage("Interrupting Qodana...")
log.SetOutput(io.Discard)
core.CheckForUpdates(version.Version)
core.ContainerCleanup()
_ = msg.QodanaSpinner.Stop()
// Sleep for a second to allow other functions monitoring signals elsewhere to do their thing.
// A future rewrite of the subprocess API should incorporate a more structured signal handling.
time.Sleep(1 * time.Second)
os.Exit(0)
}()
}