C-如何正确使用SIGUSR1?

C-如何正确使用SIGUSR1?,c,process,signals,C,Process,Signals,我在谷歌上搜索了很多地方,没有找到关于如何使用用户定义的信号SIGUSR1/SIGUSR2的明确说明 上下文:我试图在正在运行的进程中发送一个信号,以便在发送信号后,信号处理程序将打印一条语句,告诉用户信号已被捕获。我尝试使用如下所示的信号处理程序 void signalHandler(int signalNum) { if (signalNum == SIGUSR1) { printf("Caught SIGUSR1 signal.\n"); } } /* Call in m

我在谷歌上搜索了很多地方,没有找到关于如何使用用户定义的信号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。

您可以使用命令向进程发送信号。手册页上提供了所有信号的列表

您可以使用ps命令识别进程的pid,并按以下方式发送信号:

kill -10 <pid>
同样的演示是

如果希望以编程方式从另一个进程发送信号,可以使用kill as-


请参阅和@AjayBrahmakshatriya,我已经阅读了man7文档,并成功地使用这些调用终止了我的流程,但我需要能够打印消息,而不是突然结束执行。检查我的答案。嘿,Ajay,我已经阅读了man7文档,并且使用这些调用成功地终止了我的进程,但是我需要能够打印消息,而不是突然结束执行。我需要程序自动发出信号,捕捉信号,打印消息,然后停止执行。不使用CLI。@cookie,-10将使kill发送SIGUSR1,这不会突然结束进程。您的处理程序将被调用。@cookie,我已经编辑了关于进程如何在没有CLI的情况下向自身发送信号的答案。谢谢!我想我只是走错了方向。我没有意识到,在使用信号系统呼叫后,我必须发出信号。谢谢你的帮助@cookie,为了详细说明这一点,信号系统调用将函数注册为具有特定信号级别的处理程序。而raise实际上发出了信号。如果在注册处理程序之前发送信号,它将由默认操作系统处理程序处理,该处理程序只会忽略SIGUSR1和SIGUSR2,因此您不会看到任何内容
raise(SIGUSR1);
kill(pid, SIGUSR1);