首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否有可能以“延迟”的方式捕获Ctrl+C信号并运行清理功能?

是否有可能以“延迟”的方式捕获Ctrl+C信号并运行清理功能?
EN

Stack Overflow用户
提问于 2018-03-26 02:00:58
回答 2查看 0关注 0票数 0

我想捕捉Ctrl+C(SIGINT)从控制台发送的信号,并打印出部分运行总数。

这在戈朗有可能吗?

注意:当我第一次发布这个问题时,我对Ctrl+C是什么感到困惑SIGTERM而不是SIGINT.

EN

回答 2

Stack Overflow用户

发布于 2018-03-26 10:08:22

代码语言:txt
复制
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func(){
    for sig := range c {
        // sig is a ^C, handle it
    }
}()

导致程序终止和打印信息的方式完全取决于。

票数 0
EN

Stack Overflow用户

发布于 2018-03-26 11:45:01

这样做是可行的:

代码语言:txt
复制
package main

import (
    "fmt"
    "os"
    "os/signal"
    "syscall"
    "time" // or "runtime"
)

func cleanup() {
    fmt.Println("cleanup")
}

func main() {
    c := make(chan os.Signal, 2)
    signal.Notify(c, os.Interrupt, syscall.SIGTERM)
    go func() {
        <-c
        cleanup()
        os.Exit(1)
    }()

    for {
        fmt.Println("sleeping...")
        time.Sleep(10 * time.Second) // or runtime.Gosched() or similar per @misterbee
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档