gpt4 book ai didi

C - 获取信令进程的进程 ID

转载 作者:行者123 更新时间:2023-12-01 13:28:29 24 4
gpt4 key购买 nike

所以这就是我现在遇到的问题,我创建了 2 个不同的程序(一个将管理另一个,而另一个将执行多次)。这些程序将通过信号来回通信。我的问题是,是否有可能(以及如何)获取发送信号的程序的进程 ID。我的程序使用 signal() 捕获信号并使用 kill() 发送信号。

最佳答案

虽然 signal() 在标准 C 库中,但此函数不可移植,其行为取决于系统。最好使用 POSIX.1 的 sigaction()。

这是一个如何使用 sigaction 和处理程序 void h(int sig) 的示例:

int mysignal (int sig, void (*h)(int), int options)
{
int r;
struct sigaction s;
s.sa_handler = h;
sigemptyset (&s.sa_mask);
s.sa_flags = options;
r = sigaction (sig, &s, NULL);
if (r < 0) perror (__func__);
return r;
}

选项在 man sigaction 中有描述。 options=SA_RESTART 是一个不错的选择。

要知道发送信号的进程的 PID,请设置 options=SA_SIGINFO,并使用 sa_sigaction 回调代替 sa_handler;它将接收一个 siginfo_t 结构,具有一个 si_pid 字段。您可以使用 sigqueue 将数据关联到信号。

一般来说,使用信号以安全的方式进行通信是一个坏主意(当发送 n 个信号时,只有第一个有机会被传递;没有关联其他数据的钩子(Hook);可用的用户信号是只有两个)。最好使用管道、命名管道或套接字。

关于C - 获取信令进程的进程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15130660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com