我正在使用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中做到这一点,但是我对此会非常谨慎(请参阅诸如issue /
7227之
类的问题)。您最好使用信号以外的其他通信方法。
这是一个基于Ian从问题7227开始的代码的部分示例:
package main
/*
#include <stdio.h>
#include <signal.h>
#include <string.h>
struct sigaction old_action;
void handler(int signum, siginfo_t *info, void *context) {
printf("Sent by %d\n", info->si_pid);
}
void test() {
struct sigaction action;
sigaction(SIGUSR1, NULL, &action);
memset(&action, 0, sizeof action);
sigfillset(&action.sa_mask);
action.sa_sigaction = handler;
action.sa_flags = SA_NOCLDSTOP | SA_SIGINFO | SA_ONSTACK;
sigaction(SIGUSR1, &action, &old_action);
}
*/
import "C"
import (
"os"
"syscall"
"time"
)
func main() {
C.test()
pid := os.Getpid()
for {
syscall.Kill(pid, syscall.SIGUSR1)
time.Sleep(time.Second)
}
}
问题内容: 我想获取连接到手机的另一台设备的蓝牙信号强度, 如何获得蓝牙信号强度? 我试图在Google上进行大量搜索,但未找到任何答案。 有人知道我该如何实施吗? 这是myActivity: 我的清单文件中也有蓝牙许可。 问题答案: 要获取信号,您可以检查蓝牙RSSI,可以阅读已连接设备的RSSI,或执行蓝牙发现以检查附近任何设备的RSSI。 基本上,蓝牙发现是向范围内的所有电台广播以进行响应。
问题内容: 有谁知道是否有可能获得有关设备范围内所有蜂窝塔的信息?只是能够获得它们的位置或有关它们的任何其他信息,以及我将如何去做? 问题答案: 这是从当前网络状态获取基站信号塔ID(CID)和lac(位置区号)的方法: 之后获取Lat,Lng位置信息比较麻烦。这是指向有关Symbian的帖子的链接,但涉及到Cell Tower-> Lat,Lng转换:http ://discussion.for
问题内容: 我想在Go中实现“流程包装器”。基本上它将执行的是启动一个进程(比如说一个节点服务器)并监视它(捕获诸如SIGKILL,SIGTERM之类的信号…) 我认为要做的方法是使用以下命令在go例程中启动节点服务器: 然后,我想捕获由执行的命令生成的所有可能的信号。我是Go的新手,我们将不胜感激。 问题答案: Go中有三种执行程序的方式: 包含syscall.Exec,syscall.Fork
// axios 响应拦截 axiosInstance.interceptors.response.use( (res) => { 只打印出下面的数据, 实际上接口headers 返回了很多数据,为什么其他数据获取不到,如Access-Token属性?
本文向大家介绍微信公众号-获取用户信息(网页授权获取)实现步骤,包括了微信公众号-获取用户信息(网页授权获取)实现步骤的使用技巧和注意事项,需要的朋友参考一下 根据微信公众号开发官方文档: 获取用户信息步骤如下: 1 第一步:用户同意授权,获取code 2 第二步:通过code换取网页授权access_token 3 第三步:刷新access_token(如果需要) 4 第四步:拉取用户信息(需s
在AUTOSYS服务器中,我们有一堆java进程要在不同的时间调度运行。大多数java进程没有exit语句,因此我们很少像shell脚本那样编写stop作业来终止在预定停止时间运行的进程。当我们杀死这些进程时,Autosys的作业状态被设置为终止,因此我们将不正常地接收到警报。 是否有任何UNIX命令可以平稳地退出进程,以便将AUTOSYS状态更改为SU(成功)?.