2014-05-08 5 views
0

C로 작성된 linux-daemon에서 버그를 찾으려고합니다. 데몬은 무한 루프 응답으로 실행되어야합니다. 가끔은 명백한 이유없이 멈추게됩니다. 코어 덤프가 생성되지 않습니다. 어떤 커널 segfault의 메시지는/var/log/메시지코어 덤프없이 알 수없는 이유로 유닉스 데몬이 멈 춥니 다

우리는 이미 프로세스의 죽음이 특정 요청에 의해 발생하지만 버그가 발생 소스 내의 위치를 ​​찾을 수 있다는 사실을 알고에 기록되지 않습니다. 여기

내가 지금까지 무슨 짓을했는지 : 권한을 확인해야하므로 -g -Wall와

  • 재 컴파일, -ABRT와 ulimit를 -c 무제한
  • 죽이기 시작,이 코어 덤프를 생성합니다
  • char * p = NULL, c = * p; 코드 어딘가에. 이것은 코어 덤프와 kern.info segfault syslog 메시지를 생성합니다. 그리고 gdb a.out 코어는 완벽한 백 트레이스를 보여줍니다.

이 모든 것이 저의 잘못된 포인터로 인한 문제는 아니라고 생각합니다. 모든 exit() - 명령문은 syslog() - 명령문보다 우선하기 때문에 자체 중지 프로세스가 아닙니다. 그리고이 시스템에는 프로세스를 죽일 사용자가 없습니다.

코어 ump가없는 유닉스 프로세스를 죽일 수있는 다른 방법은 무엇입니까 ???

피터

답변

1

일부 신호의 기본 처리기입니다.

이것은 데몬 인 경우 일부 네트워크 통신을 처리합니다. 기본적으로 소켓 작업은 SIG_PIPE 신호를 발생시킬 수 있습니다. 기본 처리기는 프로그램을 종료합니다.

SIG_PIPE를 무시하십시오.