ps -ef | grep def 에 대해서..

shean0의 이미지

안녕하세요..
이렇게 했을때...나오는 메세지에 대해서... 알려주셨으면..합니다.

그리고..
이렇게 나오는 이유가.
signal(SIGCHID); 을 안해주어서 그렇다고 알고 있는데...

즉, fork시에 부모 프로세스가 sigchid 를 받았다는 처리를 안 해주어서 ..그렇다고 알고 있는데요...

조금더 자세하게 알고 싶습니다.

그리고..이렇게 존재하는 "좀비"프로세스를
novice 26052 24362 0 0:00 <defunct>
novice 2649 21642 0 0:00 <defunct>
novice 18163 21642 0 0:00 <defunct>
novice 2679 21642 0 0:00 <defunct>
novice 18159 21642 0 0:00 <defunct>...

를 죽이는 방법이 알고 싶습니다..

이것이 자원을 사용하고..반환되지 않아서..문제가 되거든요..

매번 도움만 청하는 novice~ 꾸벅...

mushim의 이미지

프로세스가 종료하게 되면, 커널은 프로세스에 할당된 자원을 해제하고 프로세스 상태를 zombie 상태로 표시하게 됩니다.

ps 에서 보이는 defunct 상태가 그것이죠.

바로 종료 안하고 중간에 zombie 라는 상태를 둔것은 자식 프로세스가 실행한 작업이

성공적으로 수행되었나 부로프로세스가 알기 위한 방법을 제공하기 위해서입니다.

자식프로세스가 죽게되면 부모프로세스는 SIGCHLD 시그널을 받게돼고, wait 계열의 시스템콜을 호출해서

자식 프로세스가 수행한 작업의 결과를 알게 됩니다.

그 다음에 커널은 자식프로세스에 관련된 커널자료를 완전히 삭제하게 됩니다.

만약 부모프로세스가 이러한 SIGCHLD 시그널 처리를 제대로 하지 않게 되면, 자식프로세스들은 계속 zomebie 상태로 있게 됩니다.

해결책은 부모프로세스를 종료해야만 합니다. 그려면, 부모프로세스는 init 로 바뀌게 되고,

init 프로세스가 wait 를 수행해서 자식프로세스를 완전 제거하게 됩니다.

그 다음에 SIGCHLD 시그널을 처리하는 부분을 수정하시면 됩니다.

shean0의 이미지

네..명쾌하신 설명 감사드립니다..
예전에 배우기는 했지만..실전에서 이렇게 쓰일줄 몰랐네요..
다른 프로그램짤때는 넣었는데(습관적으로..) 이번 프로그램에서는 생략해서..
이렇게 되었네요..순간 당황했습니다..ㅠㅠ
아직두 초보라는 증거니..더 열공하겠습니다.. 다시 한번 감사드리며...
나중에 이 글을 읽으시는 분께...

if(listen(server_sockfd, 5) == -1) {
        fprintf(stderr, "listen error.\n");
        close(server_sockfd);
        exit(1);
    }
  (void)signal(SIGCHLD, SIG_IGN);  /*<==이거 추가하세요*/

그럼 이만..

언제나 즐프를 꿈꾸며~

mushim의 이미지

Quote:
(void)signal(SIGCHLD, SIG_IGN);

위와 같은 코드가 자동으로 자식 프로세스를 정리하는 것은 POSIX 와 호환되지는 않는다고 하네요.

System-V 계열과 리눅스에서는 통용되는데,

BSD 계열에서도 해당되는지는 잘 모르겠네요.

제일확실한 방법은 SIGCHLD 에 대한 signal handler 함수를 작성해서

그 안에서 wait 계열 함수를 호출하는 것이겠죠.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.