作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Google 上进行了广泛的搜索,但没有找到有关如何使用用户定义信号 (SIGUSR1/SIGUSR2) 的明确说明。
上下文:我试图在正在运行的进程中发送信号,以便一旦发送信号,信号处理程序将打印一条语句来告诉用户该信号已被捕获。我尝试使用信号处理程序,如下所示。
void signalHandler(int signalNum) {
if (signalNum == SIGUSR1) {
printf("Caught SIGUSR1 signal.\n");
}
}
/* Call in main as follows */
signal(SIGUSR1, signalHandler);
现在,根据我的理解,可以通过使用我尝试过的 raise() 函数在进程内引发信号(我正在尝试执行以下操作,而无需 fork 或使用后续的子/父进程)。当采用我上面展示的方法时,程序永远不会执行信号处理函数内的任何代码,即使它是 if 语句之前的 print 语句。
在此之后,我也尝试过:
signalHandler(raise(SIGUSR1));
如果我的方法被禁止,请原谅,我来自 Python 背景。谢谢!
编辑:我需要程序自动向自身发出信号,捕获信号,打印消息,然后停止执行。不使用 CLI。
最佳答案
您可以使用 kill
向进程发送信号命令。所有信号的列表可在 signal
上找到。手册页。
您可以使用 ps
命令识别进程的 pid
并将信号发送为
kill -10 <pid>
如果您想从终端向外部发送信号,则可以使用此方法。如果您希望进程本身发送信号(或引发信号),可以使用 raise
作为 -
raise(SIGUSR1);
相同的演示是 here .
如果您想以编程方式从另一个进程发送信号,您可以使用 kill
作为 -
kill(pid, SIGUSR1);
关于C - 如何正确使用SIGUSR1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50446496/
我是一名优秀的程序员,十分优秀!