繁体   English   中英

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

[英]golang exec a command on a running binary / process

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

例如:

myapp start -debug // starts a server
myapp reload -gracefull // stops the app gracefully

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

kill -QUIT pid
kill -USR2 pid

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

接收信号

看一下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)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM