我猜我需要在我的信號處理程式中呼叫一些函式,但我不知道它是什么
我的程式想要休眠,直到它收到某種信號。所以很自然地我使用了pause(). 現在,當我發送我的應用程式時它運行得很好,SIGUSR1但是我列印出來的User defined signal 1不是我想要的,因為我計劃發送許多信號,這會使控制臺無法讀取。我嘗試通過寫入來處理信號,signal(SIGUSR1, mySignalHandler);但現在pause()在收到信號后不再恢復。我需要從 mySignalHandler 呼叫某種函式嗎?
uj5u.com熱心網友回復:
程式收到 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$
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331915.html
上一篇:С條件型別轉換
