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() {
Go语言学习之signal(二)
最新推荐文章于 2025-05-08 16:40:16 发布