Pergi: Dapatkan sumber isyarat

王林
Lepaskan: 2024-02-12 08:30:09
ke hadapan
831 orang telah melayarinya

Pergi: Dapatkan sumber isyarat

Alat praktikal yang disyorkan oleh editor php Baicao ialah Go: Dapatkan sumber isyarat. Alat ini boleh membantu pembangun mendapatkan maklumat yang berkaitan tentang sumber isyarat, termasuk kekuatan isyarat, jenis isyarat, pengendali, dsb. Dengan menggunakan alat ini, pembangun boleh menjalankan ujian dan pengoptimuman isyarat dengan mudah untuk meningkatkan pengalaman pengguna. Pada masa yang sama, alat ini juga menyediakan pelbagai pilihan fungsi, seperti paparan carta isyarat, pemantauan perubahan isyarat, dsb., yang membolehkan pembangun mempunyai pemahaman yang lebih menyeluruh tentang situasi isyarat, untuk menyahpepijat dan mengoptimumkan dengan lebih baik. Sama ada pembangunan aplikasi mudah alih atau pengoptimuman web, Go: Get Source ialah alat yang berguna.

Kandungan soalan

Saya menggunakan go untuk melancarkan beberapa skrip yang menggunakan isyarat "maklum" apabila mereka menghadapi beberapa masalah, saya tahu go boleh menangkap isyarat ini, tetapi saya perlu mengetahui pid isyarat itu. Dalam c, pengendali isyarat menghantar struktur untuk mengetahui pid isyarat, tetapi dalam perjalanan, ini nampaknya tidak berlaku

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)
}
Salin selepas log masuk

Contoh di bawah (diekstrak daripada dokumentasi isyarat) menghantar saya isyarat yang memulakan panggilan, tetapi tidak menghantar sebarang maklumat berguna (seperti pid)

Penyelesaian

Tidak, anda tidak boleh melakukan ini dalam yang disokong secara rasmi cara. Masa jalan pergi diperlukan untuk mempunyai pengendali isyarat dan tidak mendedahkan maklumat tambahan dalam apa jua cara.

Anda masih boleh melakukan ini dari c dengan menyediakan pengendali isyarat baharu, tetapi saya akan sangat berhati-hati tentang perkara ini (lihat sesuatu seperti isu/7227). Anda mungkin lebih baik menggunakan kaedah komunikasi lain selain daripada memberi isyarat.

Berikut ialah contoh separa berdasarkan kod ian dalam isu 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)
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Pergi: Dapatkan sumber isyarat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan