向其他进程发送信号

3

由于os/signal仅用于处理传入的信号,因此我想知道是否有本地方法向其他进程发送信号?

编辑:我想要管理的进程是nginx。我的Go应用程序应该侦听一些事件,然后向nginx发送SIGHUP以重新加载其配置。


可能是 https://dev59.com/Mmox5IYBdhLWcg3wNBnS 的重复问题。 - KeylorSanchez
1个回答

7

如果您使用os.StartProcess或exec.Command创建了进程,您可以使用Process.Signal方法:

cmd := exec.Command("CmdPath", "-param1", param1)
cmd.Process.Signal(signal) 

对于外部进程,您需要知道其进程ID(PID),然后调用例如:

syscall.Kill(pid,syscall.SIGHUP)

Signal是一个标准的UNIX "kill"系统调用,如果您知道进程的pid,可以使用https://golang.org/pkg/syscall/#Kill进行系统调用。


另一个进程不是由我的Go应用程序启动的。它是独立启动的。 - soupdiver
你知道 processId 吗?你应该从进程列表或某个 ngnix.pid 文件中找到它,并调用 syscall.Signal(ngnixPid,SIG_HUP)。 - Oleg
错别字:syscall.Kill (pid,syscall.SIGHUP) 当然 - Oleg
啊,太好了 :) 这正是我在寻找的。请随意将其添加为答案。 - soupdiver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接