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