如何暫停直到發出信號並且沒有 C 打印?

埃里克·斯托奇

我猜我需要在我的信號處理程序中調用一些函數,但我不知道它是什麼

我的程序想要休眠,直到它收到某種信號。所以很自然地我使用了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$ 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章