Go:获取信号源
php小编百草推荐的一款实用工具是Go:获取信号源。这款工具可以帮助开发者获取信号源的相关信息,包括信号强度、信号类型、运营商等。通过使用该工具,开发者可以方便地进行信号测试和优化,提升用户体验。同时,该工具还提供了丰富的功能选项,如信号图表展示、信号变化监测等,让开发者能够更加全面地了解信号情况,从而更好地进行调试和优化工作。无论是移动应用开发还是网络优化,Go:获取信号源都是一款实用的工具。
问题内容
我正在使用 go 启动几个脚本,当它们遇到一些问题时,它们会使用“警报”信号,我知道 go 可以捕获这些信号,但我需要知道发出信号的 pid。在 c 中,信号处理程序会传递一个结构来了解发出信号的 pid,但在 go 中,情况似乎并非如此
package main
import (
"fmt"
"os"
"os/signal"
)
func main() {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, os.Kill)
s := <-c
fmt.Println("Got signal:", s)
fmt.Printf("%+v\n",s)
}
下面的示例(从信号文档中提取)向我发送发起呼叫的信号,但没有发送任何有用的信息(如 pid)
解决方法
不,您不能以官方支持的方式执行此操作。 go 运行时需要拥有信号处理程序,并且不会以任何方式暴露额外的信息。
您仍然可以通过设置新的信号处理程序从 c 语言执行此操作,但我对此会非常谨慎(请参阅诸如 问题/7227)。您可能最好使用信号以外的其他通信方法。
以下是基于问题 7227 中 ian 代码的部分示例:
package main
import "C"
import (
"os"
"syscall"
"time"
)
func main() {
C.test()
pid := os.Getpid()
for {
syscall.Kill(pid, syscall.SIGUSR1)
time.Sleep(time.Second)
}
}
以上就是Go:获取信号源的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341