프로그램이 죽으면서 남기는 core dump 에대해서 질문있습니다.

hyun1023의 이미지

VM 으로 레드햇 9.0 , 7.2 두개에서 테스트를 하고있는데요

/etc/profile 을 아래와 같이 고쳐서 세그먼트 오류시 코어파일이 남도록 하려고 합니다.
ulimit -S -c 5242880

근데 어떤 테스트프로그램은 코어파일을 남기고 어떤프로그램은 그냥 안남기고 죽습니다.

다른 종류의 시그널로 죽어서 그런건가요?? 아마 그런거같은데,

그렇다면 시그널을 받았을때 코어파일을 남길수 있도록 설정하는 곳이 있는지요??

답변 부탁드립니다.

서지훈의 이미지

signal handler을 달고, 해당 signal을 받으면 raise()로 SIGSEGV를 날려 주면 될듯 하군요.
일단은...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <beer.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

ssehoony의 이미지

프로그램에서 직접 시그널을 핸들링하지 않았을 때
디폴트로 특정 시그널은 core 덤프가 발생하고 어떤건 그렇지 않고 합니다.
대표적으로 sig_abort 나 sig_segv 등은 디폴트가 core를 남기는 것이지요.
하지만 이것도 프로그래머가 시그널을 핸들링 하도록 핸들러를 등록하면 core 를 남기지 않습니다.
kill 했을때 기본으로 발생하는 sig_term 은 core를 남기지 않는게 디폴트있습니다.
(디폴트로 안남는 시그널을 남기게 하는 법은 모르겠네요 ^^;)

솔라리스의 경우는 man signal 를 해보면 core 덤프가 발생하는 것에 대해 자세한 이야기가 있는데
linux 는 잘 모르겠습니다.

peccavi의 이미지

코어 파일의 크기에 대해서 덧붙여 질문드립니다.

그냥 무작정 무제한으로 설정해놓고 쓰고 있는데

코어덤프가 한번 떨어지면 파일이 무조건 2기가로 생성됩니다.

이것도 마찬가지로 파일 최대크기 설정이 2기가로 되있어서 그런듯 싶은데요,

코어 파일의 크기, 어떻게 예상해야 되나요?

----
jai guru deva om...

----
jai guru deva om...

ssehoony의 이미지

아뇨 그래서 그런게 아니라 코어파일은 프로그렘이 죽기전에 사용하고 있는 메모리를 덤프하기 때문에
코어 사이즈를 2기가로 설정하셨어도 프로그램이 메모리를 1메가만 사용하고 있었다면 1메가만 덤프됩니다.

코어 덤프 파일이 2기가라면 아마 메모리 릭이 프로그램내에서 발생하고, 릭으로 인해 OS가 다룰수 있는데
MAX 메모리 사이즈를 넘어감으로 인해 세그폴트가 발생하는게 아닌가 싶네요
메모리 릭이 있는지 top 으로 프로그램의 메모리 사용량을 계속 지켜보세요.
아마 계속 증가할 듯 하네요.

peccavi의 이미지

정말 그렇군요.. 좋은것 배워갑니다.

근데 2기가가 넘도록 메모리릭이 생겼다면... 아흑... ㅜ_ㅡ

----
jai guru deva om...

----
jai guru deva om...

hyun1023의 이미지

setuid 가 걸려서 그랬었습니다..
setuid 걸린 파일은 core dump 가안 되더라구요..

아무튼 답변 주신분들 감사합니다.

ssehoony의 이미지

"setuid를 하면 core dump 가 안된다" 라고 하는게 직접적인 이유인가요?
setuid 와 core dump 와는 별개가 아닐까 하는 생각이 들어서 질문을 드립니다.

제가 짐작할때는 setuid 를 이용해서 바꾼 user가 프로그램의 working 디렉터리에 쓰기 권한이
없어서 파일을 기록할 수 없기 때문에 기록이 안된것 같은데...

단순히 setuid 를 했기 때문은 아닐 듯 합니다.
확인해 주실 수 있다면, 확인 부탁드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.