진행중인 코어 덤프를 중지하기위한 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.