Linux에서 실행중인 프로세스의 비 침입 코어 덤프를 수행하는 방법을 찾고 있습니다.
gdb 's에 익숙 gcore
하지만 gdb
프로세스에 연결되어 있고 디버깅을 위해 중지 된 경우에만 실행할 수 있습니다 . 실행이 중단되는 데 몇 초 또는 몇 분이 걸릴 수있는 큰 코어 덤프의 경우.
비 차단 대안이 있습니까?
Linux는 COW (Copy-On-Write) 메모리를 지원하며이를 사용 fork()
하지 않고 지원해야합니다 exec()
. 그래서 커널이 덤프중인 프로세스의 프로세스 페이지 테이블에 대한 복사시 복사 스냅 샷을 작성한 다음 원래 프로세스가 계속 실행되는 동안 코어를 쓰는 커널 수준의 것을 생각하고 있습니다.
나는 부모가 행복하게 나아갈 때 아이 gdb
를 강제 fork()
로 버리고 아이를 버리기 wait()
위해 부모를 데려 갈 수 있다고 확신 합니다. 그래도 지저분하지만 여전히 짧은 프로세스이지만 부모 프로세스의 두 가지 중단이 필요합니다.
누군가 전에 이것을 필요로 했습니까?
이 훌륭한 질문에 단 하나의 공감대를 줄 수있어서 유감입니다.
—
peterh는 모니카
훌륭한 질문과 나는 대답을 고대하고 있습니다. +1
—
thanasisk
1) gdb로 프로세스를 연결하는 방법 2) "콜 포크"명령으로 포크 처리 3) 자식 프로세스의 코어 덤프 4) 부모가 죽은 자식을 대기시키는 것 (또 다른 "콜 대기 4") 5 ) 공정에서 분리 6) 자동화 1-5? Gdb는 간단한 sys_ptrace () 시스템 호출을 사용하는데, gdb와는 완전히 독립적 인 C 툴이 아닙니다.
—
피터는 모니카
가상 머신에서 스냅 샷을 작성하고이를 분석 할 클론으로 가져올 수 있습니다. 여기에 나열된 도구 중 하나가 도움이 될 것입니다. cyberciti.biz/programming/linux-memory-forensics-analysis-tools
—
Giovanni Tirloni
하위 프로세스도 포크하고 종료하여 두 번째 중단을 피할 수 있습니다. 그런 다음 부모 프로세스는 자식을 즉시 기다렸다가 계속할 수 있지만 조부모는 코어를 덤프합니다.
—
kasperd