1
SIGPIPE 충돌 문제를 만났습니다. 로그에 기록하려고합니다.
그러나 나는 follow 코드를 통해 SIGPIPE를 잡을 수 없었다.
"kill -s 신호 처리"를 사용하여 코드를 확인하려고 시도하면 SIGINT, SIGSTOP, SIGSEGV 및 SIGALRM 신호와 함께 작동합니다.
그러나 SIGPIPE에서 실패했습니다.
여기에 무엇이든 놓치면 조언 해 주시겠습니까?
Ubuntu에서 SIGPIPE 신호를 잡을 수 없습니다.
void handle_pipe(int sig)
{
printf("SIG_PIPE happen, error code is %d", sig);
exit(0);
}
int main(int argc, char **argv)
{
struct sigaction action;
sigemptyset(&action.sa_mask);
action.sa_handler = handle_pipe;
action.sa_flags = 0;
//not work
sigaction(SIGPIPE, &action, NULL); //Not work with kill -13 process_id
//works well
sigaction(SIGINT, &action, NULL); //work with kill -2 process_id
sigaction(SIGSEGV, &action, NULL); //work with kill -11 process_id
sigaction(SIGALRM, &action, NULL); //work with kill -14 process_id
sigaction(SIGSTOP, &action, NULL); //work with kill -17 process_id
fooServer * pfooServer = new fooServer();
while(1)
{
pfooServer->DoEvents();
}
delete pfooServer;
}
내 환경은 우분투 12.04 LTS
안녕하세요. 감사합니다. fooServer에서 뭔가가 발생하는 것 같습니다. 하지만 fooServer가 타사 라이브러리이므로 fooServer 외부에서 이러한 종류의 신호를 잡을 수있는 제안이 있습니까? –
''new fooServer()''를 만든 후에 sigaction을 호출 해 보시 겠어요? 시도해 볼만한 가치가 있습니다. – Vorsprung
안녕하세요, Vorsprung, 감사합니다. 그것은 작동합니다. –