gpt4 book ai didi

c - 用户定义信号 sigusr1 和 sigusr2

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:57 28 4
gpt4 key购买 nike

我正在构建一个简单的软件,其中有多个进程使用用户定义的信号 SIGUSR1 和 SIGUSR2 相互通信。

我只是想知道在我下面描述的场景中会发生什么。

“Process-1 确实使用 kill 命令将 sigusr1 发送到 process-2,并且 process-2 正在执行信号处理程序进行一些计算。甚至在 process-2 完成信号处理程序的执行之前,process-1 再次发送 sigusr1 到process-2。会发生什么。对于这个我无法得到正确的答案。我想到了两种可能的情况。

  1. 当前正在执行的处理程序被中断了?或
  2. 第二个信号将被 process-2 忽略。

请多多指教。

最佳答案

处理信号需要一些时间,如果您一次发送太多信号,有些信号可能会被忽略。

您可以做的是向其他进程发送响应信号,基本上是说:

Hey, I got your signal, send me the next one I'm ready

这样,任何信号都不会被忽略,您的程序将变得更快,错误更少甚至没有。

如果你想要一个便宜的解决方案,只需使用 usleep() 和一个小值(实际上取决于你的硬件)

这是一个使用信号将 ascii 消息发送到另一个进程的示例:

Client - Sending part

void        decimal_conversion(char ascii, int power, int pid)
{
if (power > 0)
decimal_conversion(ascii / 2, power - 1, pid);
if ((ascii % 2) == 1)
kill(pid, SIGUSR1);
else
kill(pid, SIGUSR2);
usleep(1);
}

void ascii_to_binary(char *str, int pid)
{
int i;

i = 0;
while (str[i] != '\0')
{
decimal_conversion(str[i], 7, pid);
i += 1;
}
}

Server

void        sighandler(int signum)
{
static int ascii = 0;
static int power = 0;

if (signum == SIGUSR1)
ascii += 1 << (7 - power);
if ((power += 1) == 8)
{
putchar(ascii);
power = 0;
ascii = 0;
}
}

int main(void)
{
signal(SIGUSR1, sighandler);
signal(SIGUSR2, sighandler);
while (42);
return (0);
}

关于c - 用户定义信号 sigusr1 和 sigusr2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39590535/

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