루트 없이 특정 사용자 또는 쉘 세션에 대한 코어 덤프를 비활성화합니다.

루트 없이 특정 사용자 또는 쉘 세션에 대한 코어 덤프를 비활성화합니다.

저는 대규모 C++ 프로젝트를 진행 중입니다. 테스트할 때 메인 프로세스에서 코어를 덤프하는 경우가 많습니다. 이로 인해 저장되고 systemd유용한 디스크 공간을 차지하는 흥미롭지 않은 코어 덤프가 많이 생성됩니다.

Linux에서 실행할 때 특정 사용자에 대해 일시적으로만 코어 덤프 기록을 비활성화할 수 있습니까? systemd아니면 특정 tty 또는 특정 쉘 세션에 대해서만 더 나을 수도 있습니까?

사용자가 코어를 자주 덤프하는 프로그램을 실행하고 루트 개입 없이 디스크 공간을 채우고 싶지 않은 경우 코어 덤프 로깅을 비활성화하는 옵션이 있어야 한다는 것이 합리적으로 보입니다.

답변1

/etc/profile줄을 편집하고 추가해 보셨나요 ?

ulimit -c 0

이에? 루트가 아닌 경우 사람들에게 이 명령을 수동으로 실행하도록 지시할 수 있습니다.

참고: 대부분의 Linux 배포판은 기본적으로 코어 덤프 제한을 0으로 설정하므로 다음을 입력하지 않으면 일반적인 Lnux 시스템에서 디버깅이 작동하지 않습니다.

ulimit -c unlimited

당신의 껍질에.

ulimit명령은 setrlimit()모든 하위 프로세스에 상속된 프로세스의 설정을 설정하는 시스템 호출을 내부적으로 호출합니다. setrlimit()쉘뿐만 아니라 모든 프로그램에서 호출할 수 있습니다 .

이론적으로는 모든 자녀가 이러한 설정을 변경하고 새로운 상속 계보를 만들 수 있습니다. 따라서 값을 다시 변경하기 위해 중간에 쉘이 호출되지 않도록 하십시오. 예를 들어 호출이 셸의 시작 스크립트 중 하나에 있는 경우 ulimit이런 일이 발생할 수 있습니다 .

답변2

systemd-coredump허용된 답변은 sysctl 매개변수의 파이프를 통해 사용되는 시스템 에서는 작동하지 않습니다 kernel.core_pattern. (@textshell이 ​​주석에 언급했듯이) 이 경우 커널은 기술적으로 파일에 쓰지 않으므로 코어 파일 크기 제한을 따르지 않습니다.

systemd-coredump 시스템에서 코어 덤프를 방지하려면 구성 파일을 다음 위치에 넣으세요 /etc/systemd/coredump.conf.d/no-corefiles.conf.

[Coredump]
Storage=none

이 구성은 다음에 systemd-coredump가 코어를 처리하기 위해 실행될 때 적용됩니다. 이 접근 방식의 부수적인 이점은 추적이 여전히 coredumpctl.

관련 정보