Golang捕获信号

Golang捕获信号,第1张

Golang捕获信号

Go中有三种执行程序的方式:

  1. syscall
    包含syscall.Exec,syscall.ForkExec,syscall.StartProcess的软件包
  2. os
    与os.StartProcess一起打包
  3. 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



欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5476405.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-12

发表评论

登录后才能评论

评论列表(0条)

    保存