【发布时间】:2018-05-21 10:08:49
【问题描述】:
我在 Google 上进行了广泛搜索,但没有找到关于如何使用用户定义信号 (SIGUSR1/SIGUSR2) 的明确说明。
上下文:我试图在正在运行的进程中发送一个信号,这样一旦发送了信号,信号处理程序就会打印一条语句来告诉用户信号已被捕获。我尝试使用如下所示的信号处理程序。
void signalHandler(int signalNum) {
if (signalNum == SIGUSR1) {
printf("Caught SIGUSR1 signal.\n");
}
}
/* Call in main as follows */
signal(SIGUSR1, signalHandler);
现在据我了解,可以通过使用我尝试过的 raise() 函数在进程中发出信号(我正在尝试执行以下操作,而不使用分叉或使用后续的子/父进程)。当采用我上面展示的方法时,程序永远不会执行信号处理函数中的任何代码,即使它是 if 语句之前的 print 语句。
按照这个,我也试过了:
signalHandler(raise(SIGUSR1));
如果我的方法被禁止,请原谅,我来自 Python 背景。谢谢!
编辑:我需要程序自动发出信号,捕捉信号,打印消息然后停止执行。不使用 CLI。
【问题讨论】:
-
@AjayBrahmakshatriya,我已经阅读了两者的 man7 文档,并且已经成功地使用这些调用终止了我的进程,但我需要能够打印消息而不是突然结束执行。
-
检查我的答案。