코어 파일 생성이 완료되는 시기를 결정하는 후크가 있습니까?

코어 파일 생성이 완료되는 시기를 결정하는 후크가 있습니까?

core.<pid>파일 생성 시작/종료를 어떻게 결정합니까 ?

답변1

하나 넣어도 돼inotify코어 파일이 포함될 디렉터리를 살펴보세요. 데모:

/tmp$ { ulimit -c unlimited; exec sleep 9999; } &
[1] 25646
/tmp$ kill -QUIT %1                              
[1]  + 25646 quit (core dumped)  { ulimit -c unlimited; exec sleep 9999; }

다른 터미널에서:

$ inotifywait -e close_write /tmp
Setting up watches.
Watches established.
/tmp/ CLOSE_WRITE,CLOSE core

CLOSE_WRITE코어 파일이 완전히 작성되면 마지막 줄 보고 이벤트가 발생합니다.

또는 Linux를 사용하면 코어 파일 생성을 사용자 정의할 수 있습니다. 이는 시스템 전체 설정이며 루트 액세스가 필요하므로 상황에 적합할 수도 있고 그렇지 않을 수도 있습니다. 설정할 수 있습니다kernel.core_patternI/W 제어표준 출력으로 핵심 콘텐츠를 수신할 프로그램을 가리킵니다. 장난감 프로그램은 다음과 같습니다.

#!/bin/sh
cat >"/var/cores/$1-$2-$3.core"
# Do whatever you want now that the core file has been written
echo "/var/cores/$1-$2-$3.core" | mail -s "$4 dumped core" denys

/usr/local/sbin/my_core_dumper등록됨

sysctl kernel.core_pattern='|/usr/local/sbin/my_core_dumper %t %P %e %E'

답변2

이를 결정하는 "후크"가 있는지는 확실하지 않지만, OS 코어 덤프가 아닌 이상 즉시 수행됩니다. 제 경험상 코어 파일을 보면 덤핑이 완료된 것입니다. 코어나 다른 파일을 덤프하는 데 시간이 오래 걸리는 경우에는 일반적으로 루프에서 5초 간격으로 파일 크기를 확인하고 3~4회 반복 이내에 증가하지 않으면 완료되었다고 안전하게 가정할 수 있습니다.

나는 이것이 당신이 찾고 있는 것이 아니라는 것을 알고 있지만 다른 솔루션이 없는 경우 실용적인 해결 방법입니다.

관련 정보