Maison > développement back-end > Golang > Aller : récupérer la source du signal

Aller : récupérer la source du signal

王林
Libérer: 2024-02-12 08:30:09
avant
901 Les gens l'ont consulté

Aller : récupérer la source du signal

php小编百草推荐的一款实用工具是Aller : récupérer la source du signal。这款工具可以帮助开发者获取信号源的相关信息,包括信号强度、信号类型、运营商等。通过使用该工具,开发者可以方便地进行信号测试和优化,提升用户体验。同时,该工具还提供了丰富的功能选项,如信号图表展示、信号变化监测等,让开发者能够更加全面地了解信号情况,从而更好地进行调试和优化工作。无论是移动应用开发还是网络优化,Aller : récupérer la source du signal都是一款实用的工具。

问题内容

我正在使用 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)
}
Copier après la connexion

下面的示例(从信号文档中提取)向我发送发起呼叫的信号,但没有发送任何有用的信息(如 pid)

解决方法

不,您不能以官方支持的方式执行此操作。 go 运行时需要拥有信号处理程序,并且不会以任何方式暴露额外的信息。

您仍然可以通过设置新的信号处理程序从 c 语言执行此操作,但我对此会非常谨慎(请参阅诸如 问题/7227)。您可能最好使用信号以外的其他通信方法。

以下是基于问题 7227 中 ian 代码的部分示例:

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)
    }
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal