내가

2010-05-13 5 views
2

내가 코어 덤프를 얻으려고 모든 프로세스 코어 덤프하지 않기 때문에 내가 사용 내가

ulimit -c unlimited 

나는 배경에서 내 프로그램을 실행하고 나는 그것을 죽일 :

kill -SEGV %1 

그러나 그냥 얻을 :

[1]+ Exit 1     ./Test 

그리고 어떤 코어 덤프도 생성되지 않습니다. 다른 프로그램과 동일하게 작동했는데 작동 했으므로 왜 모든 프로그램에서 작동하지 않습니까? 아무도 나 도와 줄 수 없어?

감사합니다. (GNU/Linux, Debian 2.6.26)

답변

2

프로그램이 SEGV 신호를 트랩하고 다른 작업을 수행하면 OS 코어 덤프 루틴을 호출하지 않습니다. 그것이 그렇게하지 않는지 확인하십시오. 리눅스에서

,이 setuid, seteuid로 또는 다른 매개 변수는 보안상의 이유로 코어 덤프 대상에서 제외 얻을 사용하여 사용자 ID를 변경 프로세스 :

(생각/빈/passwd에이 코어를 덤프 메모리로의/etc/그림자를 읽는 동안)

UID가 변경된 후 prctl()을 호출하여 사용자 ID가 변경되는 Linux 프로그램에서 덤프 코어를 다시 활성화 할 수 있습니다.

0

또한 실행중인 프로그램이 작업 디렉토리를 변경하지 않는지 확인하고자 할 수 있습니다 chdir()), 실행 파일과 다른 디렉토리에 코어 파일을 생성하기 때문에.

그리고 당신이 너무이 시도 할 수 있습니다 :

kill -ABRT pid 
0

시도 (루트로서) :

sysctl kernel.core_pattern=core 

한 다음 실험을 반복한다. 일부 시스템에서는 기본적으로 변수가 /dev/null으로 설정됩니다.

그러나 종료 상태 1이 표시되면 프로그램이 실제로 신호를 차단합니다.