如何关闭后台go run程序

在学习过程中,搭建了下webserver,发现教程没有提供关闭办法

第一种:先查看端口占用情况,然后kill -9

比如监控的是8000端口
lsof -i:8000

#或加个tcp查找tcp服务
lsof -i tcp:8080

#找到对应的端口后kill掉
kill -9 900

第二种:

killall 程序名称

第三种:使用supervisor管理

其他方法参考:

https://segmentfault.com/q/1010000005959105  

http://siddontang.com/2015/01/25/stop-server-gracefully/

 

第四种:

如果http监听,可以使用ShutDown()

s := &http.Server{
		Addr:           ":8080",
		Handler:        http.DefaultServeMux,
		ReadTimeout:    10 * time.Second,
		WriteTimeout:   10 * time.Second,
		MaxHeaderBytes: 1 << 20,
}

s.ListenAndServe()
s.Shutdown(nil)

 

注:如果要生成指定名称的进程,可以使用:

go build -o my main.go
#然后

killall -9 my
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Go 语言中,可以使用 `flag` 包来解析命令行参数。 首先,需要创建一个 `flag.Bool` 类型的变量来存储是否需要后台执行的信息,然后使用 `flag.BoolVar` 函数来为这个变量设置命令行参数。例如: ```go var isBackground bool flag.BoolVar(&isBackground, "bg", false, "run in background") ``` 这样,就可以在启动程序时使用 `-bg` 参数来指定是否需要后台执行。 最后,调用 `flag.Parse()` 函数来解析命令行参数,然后就可以根据 `isBackground` 变量的值来判断是否需要后台执行了。 示例代码如下: ```go package main import ( "flag" "fmt" ) func main() { var isBackground bool flag.BoolVar(&isBackground, "bg", false, "run in background") flag.Parse() if isBackground { fmt.Println("Running in background") } else { fmt.Println("Running in foreground") } } ``` 执行时,可以使用以下命令来指定是否后台执行: ``` $ go run main.go -bg Running in background $ go run main.go Running in foreground ``` ### 回答2: 在golang中,可以通过os包中的Args变量获取程序启动时的命令行参数,根据这个参数来判断是否需要后台执行。 首先,通过`os.Args`获取命令行参数,Args是一个字符串切片,其中第一个元素是程序的名称,其余元素是程序启动时的命令行参数。 然后,判断命令行参数中是否存在用于指示后台执行的标志,可以使用flag包来实现。 例如,可以使用`flag.Bool`或`flag.StringVar`来定义一个布尔类型的标志,用于指示是否需要后台执行。 接下来,调用`flag.Parse()`函数来解析命令行参数,将对应标志的值赋给相应的变量。 最后,根据标志的值来决定是否需要后台执行。可以使用条件判断来实现。如果标志为true,则程序进行后台执行,可以使用goroutine来实现。 如果标志为false,则程序正常执行。 下面是一个示例代码,实现了以上过程: ```go package main import ( "flag" "fmt" "os" "os/exec" ) func main() { daemon := flag.Bool("d", false, "whether to run in background") flag.Parse() if *daemon { cmd := exec.Command(os.Args[0], os.Args[1:]...) err := cmd.Start() if err != nil { fmt.Println("Failed to start in background:", err) return } fmt.Println("Running in background...") return } // 正常执行的代码 fmt.Println("Running...") } ``` 在上面的示例中,命令行参数使用`-d`来指示是否需要后台执行。如果命令行参数中包含`-d`,则为true,否则为false。如果需要后台执行,会启动一个新的进程进行后台执行,并打印相应的提示信息;如果不需要后台执行,则执行正常的代码,并打印相应的提示信息。 ### 回答3: 在 Golang 中,可以使用 flag 包来解析命令行参数。可以通过 flag 包的 StringVar 函数来获取命令行参数的值。然后,根据获取到的值来判断是否需要后台执行。 首先,需要导入 flag 包。 ```go import "flag" ``` 然后,在程序中定义一个布尔型的变量,用来表示是否需要后台执行。 ```go var isBackground bool ``` 接下来,在 init 函数中,使用 flag 包的 BoolVar 函数来设置命令行参数。 ```go func init() { flag.BoolVar(&isBackground, "b", false, "Run in background") } ``` 这里的第一个参数是一个指向布尔型变量的指针,第二个参数是命令行参数名称,第三个参数是默认值,第四个参数是命令行参数的描述。 在程序的入口函数 main 中,解析命令行参数。 ```go func main() { flag.Parse() if isBackground { // 后台执行逻辑 } else { // 非后台执行逻辑 } } ``` 在运行程序时,可以使用命令行参数 -b 来指定是否需要后台执行。 ```shell go run main.go -b ``` 这样,程序会根据命令行参数的值来判断是否需要后台执行。 希望我的回答能帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值