我正在尝试解决我在C项目中遇到的一个问题,在这个项目中,两个进程A和B通信。进程B使用bash接收来自用户的信号,并将该信号发送到进程A。进程A必须忽略来自用户的任何信号,但必须仅从进程B接收信号。问题是:是否可以仅使用信号来编写这种通信,或者我是否必须使用其他数据结构(如套接字)才能实现通信?
发布于 2021-01-10 23:28:17
是的,对于标准的UNIX信号,这是可能的,它具有发送者的概念,因此您的应用程序可以检查是谁生成了信号。
如果进程A知道进程B的PID,它就可以向sigaction()
and SA_SIGINFO
注册它的信号处理程序。然后,在传递或接受信号时,进程A可以检查传递给处理程序的the siginfo_t
structure的si_code
和si_pid
成员。如果不是来自B,则简单地不采取任何行动。
类似于:
static pid_t pid_of_B;
....
static void
my_handler(int sig_num, siginfo_t *si, void *ignored) {
switch (si->si_code) {
case SI_USER: // sent via kill
case SI_QUEUE: // sent via sigqueue
if (si->si_pid == pid_of_B) ... // sent from B?
...
}
}
https://stackoverflow.com/questions/65654493
复制相似问题