如何暂停直到发出信号并且没有 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$