2011-03-14 5 views
1

현재 SIGSEGV를 잡아서 전자 메일을 보낸 다음 중단()하여 코어 파일을 가져 와서 프로그램을 디버깅 할 수 있습니다. (만약 내가 잡히지 않았다면, 내 프로그램이 segfault 된 것을 모를 방법이 없을 것이다. 내 프로그램은 내 서버와 별도의 서버에서 실행된다.)잡으려고 권장 신호가 있습니까?

내가 알아야 할 다른 신호가 있는가? 디버깅이나 내가 알아야 할 이유로?

+0

절대 SIGSEGV를 잡지 말아야합니다. – JeremyP

답변

3

SEGV가 이 아니기 때문에이 (가) 귀하의 프로그램 메모리를 너무 많이 손상 시켜서 이메일을 보내려는 시도가 너무나도 훌륭하게 실패하지 않는다고 생각하는 이유는 무엇입니까?

책임 부서의 지침에 따라 프로그램에서 프로그램을 모니터링해야합니다.

기본 프로그램이 계속 실행되고 있는지 확인하기 위해 (매우 간단하므로 실패 할 가능성이 훨씬 낮음) 프로그램을 실행하고, 그렇지 않은 경우 해당 전자 메일을 보내십시오. 심층 방어 (defense-in-depth)를 수행하고 두 개의 체커를 실행할 수도 있습니다. 둘 다 주 프로그램과 서로를 확인합니다. 프로그램이 콘솔에 부착하는 경우 나 같은 편집증 경우

, 당신도 별도의 시스템에서 실행할 수 있습니다 :-)

+0

신호를 사용하면 작동하지 않을 것이기 때문에, 어떻게해야합니까? 1.) 프로그램에서 signal.h를 제거하십시오. 2.) 코어를 얻을 수 있도록 프로그램의 첫 번째 줄에 setrlimit을 넣으십시오. 3) 사용하십시오. –

+0

이 있으면 cronjob이 코어 파일을 검사하고 나에게 이메일을 보냅니다. Linux에서 SIGSEGV가 누군가가 특정 작업을 수행하지 않으면 자동으로 코어 덤프를 제공한다고 생각했습니다. 그렇다면 다음에 프로그램이 시작될 때 작업 디렉토리에서 코어를 확인한 다음 전자 메일을 보낼 수 있습니다. 이것은 제 생각에 대부분의 크래시 기자가 OS X에서 작동하는 방식입니다. – JeremyP

+0

@JeremyP : SIGSEGV는 코어를 덤프하지만 코어는 리눅스 배포판에서 기본적으로 비활성화되어 있으므로 소프트 제한을 수정하기 위해 setrlimit을 사용해야합니다 (하드 제한이 없다는 가정하에). 0이거나 루트 권한이 필요합니다). –

0

글쎄, 당신은 덤프 SIGINT를 잡으려고 할 수 있습니다/어떤 버퍼를 플러시/당신의 원천 징수 기록.

0

당신은 아마 SIGSEGV가/SIGBUS 등

당신이 대신 할 일은 문제를 신호에서 서브 프로세스가 종료하면 감지하고 식별 래퍼 프로그램을 작성하고, 그 과정을 수행 할 수 있습니다 잡을 안 필요한 조치를 취하십시오.

서버 프로세스 인 경우 예기치 않게 실패하면 다시 시작해야 할 수도 있습니다.

관련 문제