진행중인 코어 덤프를 중지하기위한 Unix (또는 Linux) 메커니즘이 있습니까?


15

(매우) 큰 프로세스가 충돌하고 코어를 덤프한다고 가정하고 다른 정보 (아마 주장 메시지, 아마도 다른 것)의 원인을 알고 있다고 가정 해 봅시다.

이 경우 낭비이므로 코어 덤프가 완전히 생성되는 것을 막을 수있는 방법이 있습니까?

예를 들어 코어 덤프 프로세스의 -9를 종료하면 코어 파일 생성이 중단됩니까?

코어 덤프를 원하지 않는다는 것을 미리 알고 있다면 ulimit를 적절하게 설정하거나 OS의 다양한 코어 파일 제어 유틸리티를 사용할 수 있습니다.

그러나이 질문은 "핵심 덤프가 이미 진행 중"단계에 관한 것입니다 ...

(예를 들어, 내가 /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit 의 요청자 이고 5를 낭비하고 싶지 않다고 상상해보십시오. -6TB의 디스크 공간 :))


Linux에서는 코어 덤프 생성을 비활성화 할 수 있습니다. 옵션 일 수 있습니까?
— krisFR

아니요-일반적으로 코어 덤프가 필요하지만 코어가 필요하지 않고 문제가 무엇인지 알고 시간 / 디스크 공간 등을 절약 할 수있는 경우에는 덤프를 중지 할 수있는 방법을 찾고 있습니다. 물론 덤프가 완료되면 코어를 삭제하거나 링크를 해제 할 수 있지만 코어 덤프를 더 일찍 종료 할 수 있다면 디스크에 몇 기가의 공간을 묶을 이유가 없습니다.
— Mike G.

/ proc / <pid> 항목이 존재하는 한, 몇 초마다 휴면 상태를 유지하고 / proc / <pid> 항목이있는 한 프로그램을 호출하는 스크립트에서 "cat / dev / null> <path_to_core>"를 사용할 수 있습니다. 코어 파일에 대한 dev / null 사본. 이것은 제로화됩니다. 나는 질문의 전체 맥락을 확신하지 못하지만 이것이 효과가 있습니다.
— Schrute

슈 루트는 핵심 연결을 해제하는 것과 같은 효과가 있을까요? 디스크 공간과 시스템 리소스는 코어 쓰기가 끝날 때까지 계속 사용됩니다. 파일 크기는 du 또는 ls로 표시되지 않습니다.
— Mike G.

리소스 네, 그러나 이것은 코어 / 로그 파일과 같은 큰 파일을 처리하고 PID를 중지시키지 않는 일반적인 방법입니다. 목표가 무엇인지에 달려 있습니다.
— 슈 루트

답변:


8

일반적으로 : 아니요, 코어 덤프를 안정적으로 죽일 방법이 없습니다.

상용 * NIX에 대한 가능성은 (적어도 리눅스에서는) 있다고 말할 수 있습니다.

가능성은 커널 3.x 시리즈가 파일 쓰기를 방해 할 수 있다는 사실에 있습니다. 한 가지 가능성은 덤프를 수행하는 스레드를 찾아서 성공할 때까지 SIGKILL을 반복해서 전송하는 것입니다.

이 패치 시리즈 는 문제를 어느 정도 해결합니다.

다른 가능성은 coredump_pattern에 대체 구문을 사용하는 것입니다. 매뉴얼은 패턴 대신 2.6.19부터 덤프를 처리 할 파이프와 프로그램 (매개 변수 포함)을 사용할 수 있다고 말합니다. Ergo는 어느 덤프를 어디에 쓸 것인지 제어 할 수 있습니다 (/ dev / null은 쓸모없는 코어의 확실한 후보입니다).

이 패치는 약간의주의를 기울여야합니다 : http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html


감사합니다 zeridon-그것은 지금까지 가장 좋은 대답입니다.
— Mike G.

배관 메커니즘을 사용하는 경우 유지하려는 것이 아니라는 것을 알고있는 경우 파이프 데이터를 읽지 않고 종료 할 수 있다고 생각합니다 (파손 된 파이프로 인해 다른 문제가 발생하지 않는 한 ... 테스트해야 함)
— Alexis Wilke

0

이 링크를 확인하면 도움이 될 수 있습니다.

https://publib.boulder.ibm.com/httpserv/ihsdiag/coredumps.html


이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
— Tom O'Connor

감사합니다 Hamed,하지만 그 링크에 흥미로운 정보가 많이 있지만, 나는 그것이 내 질문에 대답한다고 생각하지 않습니다 (내가 그것을 그리워하지 않는 한-나는 아직 깨어있는 것은 아닙니다 :))
— Mike G.

-1

코어 덤프 크기를 제한하기 위해 ulimit -c (bash를 사용한다고 가정)를 실행할 수있는 것처럼 보입니다.

참조 : /ubuntu/220905/how-to-remove-limit-on-core-dump-file-size

과

http://ss64.com/bash/ulimit.html


1
Kerry는 OP에서 말했듯이 "핵심 덤프를 원하지 않는다는 것을 미리 알고 있다면 ulimit를 적절하게 설정하거나 OS의 다양한 코어 파일 제어 유틸리티를 사용할 수 있습니다." 코어 덤프가 이미 매우 큰 작업 (시간 / 디스크 공간 / 자원 절약)을 시작한 후에 중지하는 방법이 있는지 확인하려고합니다.
— Mike G.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.