• Go中go关键字的执行和main函数的退出


     1 package main
     2 
     3 import (
     4     "log"
     5 )
     6 
     7 func main() {
     8     go func() {
     9             log.Print("hello")
    10     }()
    11 }

    你会发现这样什么东西都么得,main函数退出,导致go关键字开启的goroutine协程也关闭了。

    稍微改造一下。

    package main
    
    import (
        "log"
        "time"
    )
    
    func main() {
        go func() {
                log.Print("hello")
        }()
        time.Sleep(4 * time.Second)
    }

    程序里当然不能这样写,要正经一点!

    package main
    
    import (
        "log"
        "os"
        "os/signal"
        "syscall"
    )
    
    func main() {
        go func() {
                log.Print("hello")
        }()
        quit := make(chan os.Signal)
        signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
        <-quit
    }

     PS:

    const (
    // More invented values for signals
    SIGHUP = Signal(0x1)
    SIGINT = Signal(0x2)
    SIGQUIT = Signal(0x3)
    SIGILL = Signal(0x4)
    SIGTRAP = Signal(0x5)
    SIGABRT = Signal(0x6)
    SIGBUS = Signal(0x7)
    SIGFPE = Signal(0x8)
    SIGKILL = Signal(0x9)
    SIGSEGV = Signal(0xb)
    SIGPIPE = Signal(0xd)
    SIGALRM = Signal(0xe)
    SIGTERM = Signal(0xf)
    )
    syscall.SIGINT:
    程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。
    syscall.SIGTERM:
    程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出
    ,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。
    更多信号查询:https://studygolang.com/pkgdoc
  • 相关阅读:
    4.23上机练习
    4.17java作业
    4.16java作业
    leetcode 189
    leetcode 172
    leetcode 171
    leetcode 169
    win10内网外网智能访问
    leetcode 168
    leetcode 165
  • 原文地址:https://www.cnblogs.com/qinghuaL/p/14827903.html
Copyright © 2020-2023  润新知