C - 如何正确使用SIGUSR1?

时间:2018-05-21 10:08:50

标签: c process signals

我已经google了很多,并且没有发现关于如何使用用户定义信号(SIGUSR1 / SIGUSR2)的CLEAR指令。

上下文:我正在尝试在运行过程中发送信号,以便一旦发送信号,信号处理程序将打印一条语句,告诉用户信号已被捕获。我试图使用如下所示的信号处理程序。

void signalHandler(int signalNum) {
  if (signalNum == SIGUSR1) {
    printf("Caught SIGUSR1 signal.\n");
  }
}

/* Call in main as follows */
signal(SIGUSR1, signalHandler);

根据我的理解,可以通过使用我尝试过的raise()函数在进程中引发信号(我正在尝试执行以下操作,不使用forking或使用后续的子/父进程)。当采用我上面显示的方法时,程序从不执行信号处理函数内的任何代码,即使它是if语句之前的print语句。

在此之后,我也尝试过:

signalHandler(raise(SIGUSR1));

原谅我的方法是否被禁止,我来自Python背景。谢谢!

编辑:我需要程序自动发出信号,捕捉信号,打印信息然后停止执行。不使用CLI。

1 个答案:

答案 0 :(得分:0)

您可以使用kill命令向进程发送信号。所有信号的列表可在signal手册页上找到。

您可以使用pid命令识别流程的ps,并将信号发送为

kill -10 <pid>

如果您想从终端外部发送信号,这是方法。如果您希望过程本身发送信号(或提升信号),您可以使用raise作为 -

raise(SIGUSR1);

同样的演示是here

如果您想以编程方式从其他进程发送信号,可以使用kill作为 -

kill(pid, SIGUSR1);