我猜我需要在我的信號處理程序中調用一些函數,但我不知道它是什麼
我的程序想要休眠,直到它收到某種信號。所以很自然地我使用了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] 删除。
我来说两句