我想在Go中实现"流程包装器"。 基本上它将执行的是启动一个进程(比如说节点服务器)并监视它(捕获诸如SIGKILL,SIGTERM之类的信号...)
我认为方法是使用syscall.Exec在go例程中启动节点服务器:
然后,我想捕捉由syscall执行的命令生成的所有可能的信号。 我是Go的新手,我们将不胜感激。
Go中有三种执行程序的方式:
syscall软件包,包含syscall.Exec,syscall.ForkExec,syscall.StartProcess
带有os.StartProcess的os软件包
带有exec.Command的os/exec包
syscall.StartProcess是低级别。它返回uintptr作为句柄。
os.StartProcess为您提供了一个不错的os.Process结构,您可以调用Signal。 os/exec使您可以在管道上使用io.ReaderWriter。两者都在内部使用syscall。
读取从您自己的进程以外的进程发送来的信号似乎有些棘手。如果有可能,syscall将能够做到。在更高级别的程序包中,我看不到任何明显的东西。
要接收信号,您可以使用信号。
您只需要更改您想听的信号即可。如果不指定信号,它将捕获所有可以捕获的信号。
您将使用syscall.Kill或Process.Signal映射信号。您可以从Process.Pid或从syscall.StartProcess获取pid。
您可以使用signal.Notify: