在 Linux 中使用 Signal 发送信息

发布于 2024-12-02 05:45:41 字数 71 浏览 0 评论 0原文

当从一个进程向另一个进程发送信号时,我还想发送一个 long 类型的值。这可能吗?我正在使用 SIGUSR1。

When sending a signal from one process to another, I also want to send a value of type long. Is that possible? I am using SIGUSR1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

百变从容 2024-12-09 05:45:41

当然可以,但您必须使用 sigqueue(2) 而不是 kill(2)。您可以发送 intsival_ptr

union sigval {
    int   sival_int;
    void *sival_ptr;
};

建立处理程序

struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = handler;
sa.sa_flags = SA_SIGINFO; /* Important. */

sigaction(SIGUSR1, &sa, NULL);

使用 SA_SIGINFO 建立的信号处理程序

static void
handler(int sig, siginfo_t *si, void *ucontext)
{
    si->si_value; /* This is what you're looking for. */
}

发送整数

union sigval sv;
sv.sival_int = 42;

sigqueue(pid, SIGUSR1, sv);

Sure you can, but you'll have to send it with sigqueue(2) instead of kill(2). And you can send an int or a sival_ptr.

union sigval {
    int   sival_int;
    void *sival_ptr;
};

Establish the handler

struct sigaction sa;
sigemptyset(&sa.sa_mask);
sa.sa_sigaction = handler;
sa.sa_flags = SA_SIGINFO; /* Important. */

sigaction(SIGUSR1, &sa, NULL);

The handler for a signal established using SA_SIGINFO

static void
handler(int sig, siginfo_t *si, void *ucontext)
{
    si->si_value; /* This is what you're looking for. */
}

Sending an integer

union sigval sv;
sv.sival_int = 42;

sigqueue(pid, SIGUSR1, sv);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文