만 그들 중 두 사람은 처리 될 것이며 나머지는 무시됩니다두 개 이상의 연속 된 신호를 잡는 방법? 나는 다음과 같은 프로그램에 여러 후속 <code>Hangup</code> 신호를 보낼 경우
:#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int id;
void handler(int s)
{
id++;
int i;
for(i=0; i<3; i++)
{
printf("Sig %d\n", id);
sleep(2);
}
}
int main()
{
int i;
signal(SIGHUP, handler);
for(i=0; ; i++)
{
printf("%d\n", i);
sleep(1);
}
return 0;
}
내가 프로세스에 신호를 보내려면 다음 명령을 사용하여 내가 세 번 연속해서 위의 명령을 실행하면
kill -l {#process}
, 제 3 신호는 다음과 같은 출력에서 무시됩니다
0
1
2
3
4
5
6
7
Sig 1
Sig 1
Sig 1
Sig 2
Sig 2
Sig 2
8
9
10
11
12
세 번째 신호도 잡을 방법이 있습니까?
신호 처리기 내에서 잠자기는 의심 스럽습니다. 거기에 있어야합니까? – wallyk
@wallyk 매뉴얼 페이지에 따르면, POSIX.1-2004는 시그널 핸들러 내에서 'sleep'을 안전하게 요구한다. –
정상 신호가 대기열에 들어 가지 않으면 어떤 작업을 하던지 놓치게됩니다. – nos