【发布时间】:2021-10-22 07:00:10
【问题描述】:
我猜我需要在我的信号处理程序中调用一些函数,但我不知道它是什么
我的程序想要休眠,直到它收到某种信号。所以很自然地我使用了pause()。现在,当我发送我的应用程序 SIGUSR1 时它运行得很好,但是我得到了 User defined signal 1 的打印输出,这不是我想要的,因为我计划发送很多信号,这会使控制台无法读取。我尝试通过写signal(SIGUSR1, mySignalHandler); 来处理信号,但现在pause() 在收到信号后不再恢复。我需要从 mySignalHandler 调用某种函数吗?
【问题讨论】:
-
您不应在信号处理程序中调用函数。您在信号内设置一个变量,并从程序内的循环中检查该变量。循环内的等待可以通过 sleep() 来完成,因为信号会唤醒睡眠。
-
你知道谁打印“用户定义的信号1”吗?请告诉我们minimal reproducible example。
-
@thebusybee 我写代码的错误与解决方案无关。原来在线程中执行 raise 并没有真正将它发送到主线程。它试图自己处理。只需要 Mathieu 的例子就向我展示了如何正确地做到这一点,并注意到他所做的和我所做的之间的区别