![임베디드 Linux(busybox 버전)에서 zip 프로그램으로 코어 덤프 파이핑이 실패함](https://linux55.com/image/104527/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C%20Linux(busybox%20%EB%B2%84%EC%A0%84)%EC%97%90%EC%84%9C%20zip%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9C%BC%EB%A1%9C%20%EC%BD%94%EC%96%B4%20%EB%8D%A4%ED%94%84%20%ED%8C%8C%EC%9D%B4%ED%95%91%EC%9D%B4%20%EC%8B%A4%ED%8C%A8%ED%95%A8.png)
저는 busybox 버전을 사용하여 임베디드 Linux를 개발 중입니다. Linux 코어 덤프를 생성하려면 다음을 사용합니다.
ulimit -c unlimited
그러다가 거대한 코어 파일(~1GB)을 얻었음을 확인했습니다. 내 응용 프로그램이 거대하고 너무 많은 메모리를 할당하기 때문입니다.
이제 저는 이 대용량 코어 파일을 최적화할 솔루션을 찾고 있습니다. 내가 찾은(http://man7.org/linux/man-pages/man5/core.5.html) 코어 덤프를 프로그램에 파이프할 수 있습니다. 코어 덤프를 생성하는 동안 압축하려고 합니다.
즉
cat /proc/sys/kernel/core_pattern
| /tmp/shellscript.sh /tmp/core.%p.gz
cat /tmp/shellscript.sh
#!/bin/sh
/bin/gzip > "$1"
이제 "코어 덤프를 프로그램으로 전송"은 다음에서만 작동한다는 것을 깨달았습니다.일반 데스크탑 우분투 시스템.
그러나 우리의 목표는 임베디드 Linux 시스템의 비지박스 버전을 사용하는 것입니다. busybox에서 "프로그램으로 코어 덤프 전송(이 경우 압축)"과 똑같은 단계를 수행할 때 코어 덤프가 전혀 생성되지 않는지 궁금합니다.
그러나 busybox에서 파이프 옵션을 제거하면 코어 덤프가 표시됩니다. 즉
root@(none):~ cat /proc/sys/kernel/core_pattern
/tmp/core_top
비지박스 버전이 포함된 임베디드 Linux에서 코어 덤프를 프로그램으로 파이핑하는 것이 작동하지 않는 이유를 아는 사람이 있습니까?
감사해요,
답변1
man 5 core
* The program must be specified using an absolute pathname (or a
pathname relative to the root directory, /), and must immediately
follow the '|' character.
|
따라서 및 사이에는 공백이 없어야 합니다 /
.
/tmp
또한 스크립트가 있는 파티션에 스크립트가 설치되어 있을 수도 있습니까 -o noexec
?