如何暂停直到发出信号并且没有 C 打印?
How to pause until signal and not have C print?
我想我需要在我的信号处理程序中调用一些函数,但我不知道它是什么
我的程序想要休眠直到它收到某种信号。所以我自然而然地使用了pause()
。现在,当我发送我的应用程序 SIGUSR1
时,它 运行 就好了,但是我得到了 User defined signal 1
的打印结果,这不是我想要的,因为我计划发送很多信号,这将使控制台不可读。我尝试通过写入 signal(SIGUSR1, mySignalHandler);
来处理信号,但现在 pause()
在我收到信号后不再恢复。我需要从 mySignalHandler 调用某种函数吗?
程序接收到 USR1 信号时的默认行为是终止(参见 https://www.man7.org/linux/man-pages/man7/signal.7.html,标准信号)。
一个空的信号句柄将执行您想要的操作:不会显示任何消息。
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
static int s_got = 0;
void handler(int s)
{
++s_got;
}
int main(void)
{
signal(SIGUSR1, handler);
while(1) {
pause();
printf("resumed %d\n", s_got);
}
return 0;
}
:~/so/pause$ gcc -Wall main.c
:~/so/pause$ ./a.out &
[1] 2286
:~/so/pause$ pkill -USR1 a.out
resumed 1
:~/so/pause$ pkill -USR1 a.out
resumed 2
:~/so/pause$ pkill -USR1 a.out
resumed 3
:~/so/pause$ pkill -USR1 a.out
resumed 4
:~/so/pause$ pkill -USR1 a.out
resumed 5
:~/so/pause$
我想我需要在我的信号处理程序中调用一些函数,但我不知道它是什么
我的程序想要休眠直到它收到某种信号。所以我自然而然地使用了pause()
。现在,当我发送我的应用程序 SIGUSR1
时,它 运行 就好了,但是我得到了 User defined signal 1
的打印结果,这不是我想要的,因为我计划发送很多信号,这将使控制台不可读。我尝试通过写入 signal(SIGUSR1, mySignalHandler);
来处理信号,但现在 pause()
在我收到信号后不再恢复。我需要从 mySignalHandler 调用某种函数吗?
程序接收到 USR1 信号时的默认行为是终止(参见 https://www.man7.org/linux/man-pages/man7/signal.7.html,标准信号)。
一个空的信号句柄将执行您想要的操作:不会显示任何消息。
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
static int s_got = 0;
void handler(int s)
{
++s_got;
}
int main(void)
{
signal(SIGUSR1, handler);
while(1) {
pause();
printf("resumed %d\n", s_got);
}
return 0;
}
:~/so/pause$ gcc -Wall main.c
:~/so/pause$ ./a.out &
[1] 2286
:~/so/pause$ pkill -USR1 a.out
resumed 1
:~/so/pause$ pkill -USR1 a.out
resumed 2
:~/so/pause$ pkill -USR1 a.out
resumed 3
:~/so/pause$ pkill -USR1 a.out
resumed 4
:~/so/pause$ pkill -USR1 a.out
resumed 5
:~/so/pause$