Zombie Process에 관한 질문입니다.

feelpassion의 이미지

좀비 프로세스가 생기는 이유가 두 가지 있습니다.
1. 자식이 먼저 죽었는데 부모가 종료를 안해서 리턴 값을 받아가지 않을때
2. 부모가 먼저 죽어서 자식의 리턴 값을 받아갈 프로세스가 없을 때(이 경우 init process가 부모 역할)

위의 두 경우 중에서 1의 경우는 확인했습니다만....
2의 경우는 fork(), sleep() 등을 써서 확인이 힘들군요. 부모가 먼저 죽어도 자식이 좀비가 안되더군요.
2의 경우를 확인할 수 있는 쉬운 방법 없을까요?

File attachments: 
첨부파일 크기
Image icon processstate.JPG36.26 KB
fromdj의 이미지

부모를 kill -9 로 죽여보시는게 어떨까요
리눅스가 버젼업되면서 좀비없도록 처리하는건가 ?

^^ be cool ~
http://fromdj.pe.kr

feelpassion의 이미지

그래도 안되던데요^^;; 별의 별 짓 다 해봤죠...

남으로 창을 내겠소.
밭이 한참갈이 괭이로 파고 호미론 김을 메지요.
구름이 꼬인다 갈리있소. 새들의 노래는 공으로 들으랴오.
강냉이가 익거든 와자셔도 좋소.
왜 사냐건 웃지요.

jinyeong의 이미지

Zombie process 가 생성되는 경우는 부모가 자식의 종료 상태를 반환받지 않았을 경우 입니다. (wait, waitpid)

부모가 먼저 종료 했을 경우 init process가 이 역할을 하게 되므로, 역시 zombie process가 생성되지 않게 되겠지요.

I thought what I'd do was,
I'd pretend I was one of those deaf-mutes.. or should I?

익명 사용자의 이미지

부모 프로세스가 먼저 죽고, init process가 부모가 되었을 때 좀비 프로세스가 됩니다.
지금 커널이 2.6.X 라서 바뀌었는가 모르겠는데 확실하거든요^^

sangwoo의 이미지

feelpassion wrote:
좀비 프로세스가 생기는 이유가 두 가지 있습니다.
1. 자식이 먼저 죽었는데 부모가 종료를 안해서 리턴 값을 받아가지 않을때
2. 부모가 먼저 죽어서 자식의 리턴 값을 받아갈 프로세스가 없을 때(이 경우 init process가 부모 역할)

위의 두 경우 중에서 1의 경우는 확인했습니다만....
2의 경우는 fork(), sleep() 등을 써서 확인이 힘들군요. 부모가 먼저 죽어도 자식이 좀비가 안되더군요.
2의 경우를 확인할 수 있는 쉬운 방법 없을까요?

parent 프로세스가 죽는 것은 child 가 좀비가 되는 조건이 아닙니다.

----
Let's shut up and code.

nowol의 이미지

feelpassion wrote:
좀비 프로세스가 생기는 이유가 두 가지 있습니다.
1. 자식이 먼저 죽었는데 부모가 종료를 안해서 리턴 값을 받아가지 않을때
2. 부모가 먼저 죽어서 자식의 리턴 값을 받아갈 프로세스가 없을 때(이 경우 init process가 부모 역할)

위의 두 경우 중에서 1의 경우는 확인했습니다만....
2의 경우는 fork(), sleep() 등을 써서 확인이 힘들군요. 부모가 먼저 죽어도 자식이 좀비가 안되더군요.
2의 경우를 확인할 수 있는 쉬운 방법 없을까요?

UNP를 보면...
If a process terminates, and that process has childern in the zombie state, the parent process ID of all zombie childern is set to 1(the init process), which will inherit the childern and clean them up(i.e, init will wait for them, which removes the zombie)

위에서 주의 깊게 봐야 할 거는 init가 wait를 통해 removes the zombie를 해 준다입니다.

어떻게 테스트를 하셨는지 모르겠으나,
일단 중요한 것은 parent가 죽을시에 childern의 상태이구요..
parent가 죽었다고 멀쩡한 child가 zombie가 되는 것은 아닙니다.
설상 zombie인 상태의 자식들을 거두지 않고 부모가 죽었을 경우에도 child의 ppid가 init로 바뀌고 init가 zombie상태인 자식들을 wait를 통해서 거둬 줄 것입니다.

mach의 이미지

유닉스/리눅스에서
1) 모든 프로세스는 부모/자식의 관계를 갖는다.
* 일반적으로 특정 프로세스를 생성한(fork) 프로세스가 부모 프로세스이며,
부모의 유고시에도 1) 조건은 유지되어야 하며, 단, 부모를 1(init)로 한다.
2) 모든 프로세스는 첨부된 그림에 나타난 모든 스테이트를 가질 수 있다.
* 참고: 좀비스테이트도 프로세스가 가질 수 있는 한 state이며, 필연적으로 모든 프로세스가 거치는 상태임(종료될 수 있다면)

* 절차
1) A 라는 프로세스가 죽으면 자원을 반납하고 일단 좀비스테이트로 세팅됨(A->죽으면 좀비, zombie, defunct가 됨)
2) A 프로세스는 자신의 부모프로세스에게 자신의 exit 코드를 리턴함
3) 커널은 A 프로세스가 죽으면, 부모 프로세스에게 시그널(Sig child)을 발생시켜 통보하고, 그에 대해 처리(wait, signal 핸들러로 처리)를 대기함
4) 시그널을 받은 부모는 SIGCHLD에 대해 wait, signal handler로 처리
5) 커널은 좀비를 해제하고 완전하게 프로세스 관리 리스트에서 A 프로세스에 대한 엔트리를 제거

질문하신분의 2번이 나타나기 어려운 이유는 4,5를 init가 수행하여 매우 빠르게 진행되기 때문입니다. 유저모드에서만 이를 추적해 보기는 어렵다고 여겨집니다.

* 첨부한 그림은 전형적인 유닉스의 프로세스 상태 다이아그램입니다. Bach의 9가지 스테이트를 선호하지만, 이 그림도 쓸만하다는...

댓글 첨부 파일: 
첨부파일 크기
Image icon 0바이트

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

feelpassion의 이미지

모두들 감사합니다^^ 어쨌든 저의 말이 맞는 것 같아 기분은 좋네요^^;;
교수님께 함 우긴 뒤라 만약 틀렸으면 대략 난감일 뻔 했습니다..ㅎㅎ

남으로 창을 내겠소.
밭이 한참갈이 괭이로 파고 호미론 김을 메지요.
구름이 꼬인다 갈리있소. 새들의 노래는 공으로 들으랴오.
강냉이가 익거든 와자셔도 좋소.
왜 사냐건 웃지요.

girneter의 이미지

정리하자면
parent process 가 먼저 죽으면
child 가 zombie state 가 되긴 하지만
재빨리 init process 가 처리해 주기 때문에
zombie state 에서 벗어난다

이거지요?

개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.