Go语言学习之signal(二)

package main

import (
    "bytes"
    "errors"
    "fmt"
    "io"
    "os"
    "os/exec"
    "os/signal"
    "runtime/debug"
    "strconv"
    "strings"
    "sync"
    "syscall"
    "time"
)

func main() {
    go func() {
        time.Sleep(5 * time.Second)
        sendSignal()
    }()
    handleSignal()
}

func handleSignal() {
/*
    这里先后调用了两次signal.Notify函数,
    第一次调用时设定的信号集合中包含SIGINT,SINGQUIT两个信号
    第二次调用时只设定了SIGQUIT一个信号

    如果当前进程接收的时SIGQUIT信号,则分别发送给sigRecv1和sigRecv2两个通道
    如果接收到的时SIGINT信号,则只发送给sigRecv1这一个通道
*/
    sigRecv1 := make(chan os.Signal, 1)
    sigs1 := []os.Signal{syscall.SIGILL, syscall.SIGQUIT}
    fmt.Printf("Set notfication for %s...[sigRecv1]\n", sigs1)
    signal.Notify(sigRecv1, sigs1...)
    sigRecv2 := make(chan os.Signal, 1)
    sigs2 := []os.Signal{syscall.SIGQUIT}
    fmt.Printf("Set notification for %s...[sigRecv2]\n", sigs2)
    signal.Notify(sigRecv2, sigs2...)

/*
    sync,WaitGroup类型值wg的Add方法。添加了一个类型值为2的差量,然后在每段并发程序后面,
    分别调用了wg的Done方法,该发放可以视为使差量减1, 在最后,还应该调用wg的Wait方法,该方法
    会一直阻塞, 知道差量变为0
*/
    var wg sync.WaitGroup
    wg.Add(2)
    go func() {
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值