golang 在正在运行的二进制文件/进程上执行命令

如果您查看 Nginx,它会调用“nginx reload”来重新加载自身。有没有办法从命令行向正在运行的进程发送信号?即使主进程启动子进程,我如何向主进程发送命令以通知其子进程?


前任:


myapp start -debug // starts a server

myapp reload -gracefull // stops the app gracefully

现在我需要发送 os 信号来通知我的服务器执行正常关机


kill -QUIT pid

kill -USR2 pid

我希望我的问题足够清楚 Thnx



杨__羊羊
浏览 254回答 2
2回答

牧羊人nacy

接收信号看一下os/signal包装。封装信号实现对传入信号的访问。文档中甚至还有一个例子:// Set up channel on which to send signal notifications.// We must use a buffered channel or risk missing the signal// if we're not ready to receive when the signal is sent.c := make(chan os.Signal, 1)signal.Notify(c, os.Interrupt, os.Kill)// Block until a signal is received.s := <-cfmt.Println("Got signal:", s)发送信号要了解如何发送信号,请看一看signal_test.go,它使用syscall. 例如 :// Send this process a SIGHUPt.Logf("sighup...")syscall.Kill(syscall.Getpid(), syscall.SIGHUP)waitSig(t, c, syscall.SIGHUP)

慕慕森

我发现在 go i 中我们可以将环境传递给 syscall.Execerr&nbsp;:=&nbsp;syscall.Exec(argv0.&nbsp;os.Args.&nbsp;os.Environ())只需将当前 env 复制到子进程。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go