
Go中有三种执行程序的方式:
syscall
包含syscall.Exec,syscall.ForkExec,syscall.StartProcess的软件包os
与os.StartProcess一起打包os/exec
与exec.Command一起打包
syscall.StartProcess是低级别。它返回a
uintptr作为句柄。
os.StartProcess给您一个不错的
os.Process结构,您可以调用Signal。
os/exec让您
io.ReaderWriter可以在管道上使用。两者都在
syscall内部使用。
读取 从 您自己的进程以外的进程发送的信号似乎有些棘手。如果有可能,
syscall将能够做到。在更高级别的程序包中,我看不到任何明显的东西。
要接收信号,您可以使用signal.Notify像这样通知:
sigc := make(chan os.Signal, 1)signal.Notify(sigc, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)go func() { s := <-sigc // ... do something ...}()您只需要更改您想听的信号即可。如果不指定信号,它将捕获所有可以捕获的信号。
您将使用syscall.Kill或Process.Signal映射信号。您可以
Process.Pid从syscall.StartProcess或从中获取pid
。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)