为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
杨__羊羊 2021-08-16 19:03:18
如果您查看 Nginx,它会调用“nginx reload”来重新加载自身。有没有办法从命令行向正在运行的进程发送信号?即使主进程启动子进程,我如何向主进程发送命令以通知其子进程?前任:myapp start -debug // starts a servermyapp reload -gracefull // stops the app gracefully现在我需要发送 os 信号来通知我的服务器执行正常关机kill -QUIT pidkill -USR2 pid我希望我的问题足够清楚 Thnx
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

接收信号

看一下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 := <-c

fmt.Println("Got signal:", s)

发送信号

要了解如何发送信号,请看一看signal_test.go,它使用syscall. 例如 :


// Send this process a SIGHUP

t.Logf("sighup...")

syscall.Kill(syscall.Getpid(), syscall.SIGHUP)

waitSig(t, c, syscall.SIGHUP)


查看完整回答
反对 回复 2021-08-16
?
慕慕森

TA贡献1856条经验 获得超17个赞

我发现在 go i 中我们可以将环境传递给 syscall.Exec

err := syscall.Exec(argv0. os.Args. os.Environ())

只需将当前 env 复制到子进程。


查看完整回答
反对 回复 2021-08-16
  • 2 回答
  • 0 关注
  • 253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信