부모프로세스와 자식프로세스에서의 stdout 출력문제에 대해서 여쭤보고 싶습니다.

cain의 이미지

안녕하세요~ Linux 시스템 콜에 대해서 공부하고 있는 학생입니다...

제가 이해를 못한 부분에 있어서 자료를 찾아봐도 없길래... 여기에 글을 남기게 되었습니다.

부모프로세스와 자식프로세스의 출력에 관한 부분인데요

fork()를 이용해서 자식프로세스 생성후에 해당 자식프로세스를 무한루프를 돌며 0부터 1씩 증가하면서 출력하도록 하였습니다.
그리고 부모프로세스에서 SIGINT를 받으면 signal(SIGINT, signal_handler)를 이용해서 핸들러가 호출되도록 하였습니다.

그런데... SIGINT를 받기 전까진 자식프로세스에서 열심히 출력을 해주다가 SIGINT를 부모프로세스에서 받고 signal_handler를 호출하였는데

signal_handler에서 SIGINT를 몇 번이나 받았는지 값을 증가시키면서 출력하도록 하였는데 핸들러가 한번 호출되고 나서 자식프로세스에서 출력이 되질 않습니다.

뭔가 놓친 부분이 있는 것 같은데 감이 오질 않고 자료를 찾아봐도 대부분 핸들러 자체에 대한 설명이나 시그널에 대한 설명이지 출력에 있어서 이런 문제를 다루는 자료를 찾지 못했네요...

제가 아직 생각하지 못한 부분이 어디인지 간단한 설명이라도 짚어주셨으면 합니다..

읽어주셔서 고맙습니다^^;;

cinsk의 이미지

nthroot의 이미지

http://blog.n01se.net/?tag=setsid

아마 세션을 분리해줘야 시그널이 도달하지 못할듯 한데요.
아니면 자식 프로세스에서 SIGINT을 ignore 해야 할 것도 같네요.
자식 프로세스가 죽어 있는지 확인해보면 알수있겠네요.

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

cain의 이미지

아무래도 원인이 SIGINT때문이었던 것 같습니다.

SIGINT를 부모프로세스에서도 받고 자식프로세스에서도 받는다는 것을 잊고있었습니다...

SIGINT를 BLOCK해주니까 되네요 ^^;; 간단한 것인데도 계속 터미널에서의 출력버퍼로밖에 생각이 안되니
정작 중요한 부분으로는 생각을 못했습니다..

cinsk님, nthroot님 답변 감사합니다 ^^;

by chaoxifer

by chaoxifer

댓글 달기

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