首页 > 其他 > 详细

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

时间:2021-05-30 15:55:18      阅读:24      评论:0      收藏:0      [点我收藏+]
 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

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

原文:https://www.cnblogs.com/qinghuaL/p/14827903.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!