fork()에 대해서.

moonzoo의 이미지

parent가 fork()를 여러번 수행하여 다수의 child 프로세스들을

생성 했을 때,

1번 질문.
parent가 죽을때 child들을 다 죽이고 죽을려면
fork()할때마다 child 들의 pid들을 저장해 놓아야 할까요?

2번 질문
혹시 부모가 죽을때 child에게 SIGTERM을 날린다고
본적이 있는 듯--; 한데 그런가요?

3번 질문
parent에서 signal()을 걸어둔 것이 child에게도 그대로 상속되나요?
예를 들면 parent에서 signal(SIGTERM,sig_handle) 했을 때
자식도 sigterm을 받으면 sig_handle에서 처리되는 건가요?

icristi의 이미지

moonzoo wrote:

parent가 죽을때 child들을 다 죽이고 죽을려면
fork()할때마다 child 들의 pid들을 저장해 놓아야 할까요?

그럴 필요 없구요.
pid 를 0으로 하면 집단(즉, 자신의 자식프로세스 집단)에게 신호를 보낼 수있습니다.

moonzoo wrote:

혹시 부모가 죽을때 child에게 SIGTERM을 날린다고
본적이 있는 듯--; 한데 그런가요?

그럴까요? 그러면 자식들이 다 죽을텐데....
세상에 어느 부모가 나 죽으니 니네도 따라 죽어라 하겠습니까..

moonzoo wrote:

parent에서 signal()을 걸어둔 것이 child에게도 그대로 상속되나요?
예를 들면 parent에서 signal(SIGTERM,sig_handle) 했을 때
자식도 sigterm을 받으면 sig_handle에서 처리되는 건가요?

모든 것을 복사하죠.. 당연히 핸들러도 복사될거에요.

icristi의 이미지

답변 달고, 질문을 되새겨 보니 질문하신 분의 의도를 알 것 같아요. 무엇 떄문에 이런 질문을 하시는지^^

자식을 fork 시키는 부모 프로세스(예를들어 daemon) 를 죽이기 위해 신호를 보내거나 kill 하면,
부모만 죽게되고 자식들은 모두 init을 부모로 하게 되고 여전히 살아있게 됩니다.
따라서, 부모프로세스만 죽임으로써, 그 아래 forking된 모든 자식들을 함께 죽이고자 하는 의도가 있는 것이라 예상됩니다.

제가 예상한 것이 맞나요?

moonzoo의 이미지

친절한 답변에 감사드립니다.

님께서 예상하신 것이 맞습니다.

pid를 0으로 해서 보내는 것을 몰랐는데..좋더군요..

일단은 부모프로세스 pid를 저장해 두었다가..

signal handler에서 부모프로세스 일 경우에만

pid 0으로 해서 kill() 하는 것으로 처리했습니다..

더 좋은 방법이 있는지는 모르겠는데..일단은 잘 처리되어서

기쁘네요 ^^

댓글 달기

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