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_pattern
I/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회 반복 이내에 증가하지 않으면 완료되었다고 안전하게 가정할 수 있습니다.
나는 이것이 당신이 찾고 있는 것이 아니라는 것을 알고 있지만 다른 솔루션이 없는 경우 실용적인 해결 방법입니다.