SIGTERM 처리후에도 바로 죽지 않는다?

mg2000의 이미지

HP-UX 11.23에서 개발중인데요.

제가 SIGTERM 시그널이 올 경우, 여러가지 마무리를 하고 마지막에 exit하는 함수를

만들었는데요.

exit후에도 바로 죽지 않고, main함수가 일부 실행이 되고 죽는데요.

리눅스에서는 동일한 코드로 exit후에 바로 죽어버리는데....

HP-UX에서는 왜 그런것인지 궁금하네요.

mach의 이미지

혹시, 바로 죽지 않는다고 판단한 근거가 출력문입니까?
시그널이 메인코드의 어느 부분 수행중에 발생되었는지를 측정하기는 어렵기 때문에 의구심이 듭니다.

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

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

mg2000의 이미지

시그널이 받아서 실행된 시점이라면 그전에 실행되었던 출력문은 먼저 찍히고,

시그널의 출력문이 찍혀야 하는 것 아닌가요?

(리눅스에서는 그렇게 돌아갔는데...)

메인 함수의 출력문이 나중에 찍혔더라도, 실제로는 시그널 받아서 돌아간 함수의 출력문보다

먼저 실행됬을 가능성도 있다는 말씀이신지...??

jick의 이미지

즉, signal handler에서 printf를 불러서 나오는 결과는 믿어서는 안됩니다.

1번이나 2번 fd로 write()를 불러서 확인해 보세요.

mg2000의 이미지

main함수에서는 message queue내용을 확인하기 위해 loop를 돌던중...

SIGTERM을 받으면 message queue를 없애고, exit를 하게 되는데...

그 이후에 실행되는게 없다면, main함수가 message queue를 못찾는다는 에러는

나오지 않아야 할텐데요. (그냥 종료가 되니...)

에러 메시지가 몇번 나오고 몇번 나고 종료가 되네요.

알송달쏭하네요.

jick의 이미지

Signal handler에서 부르는 함수가 전부 asynchronous-signal-safe한 함수인지 확인해 보셨나요? Stevens의 Advanced programming in the unix environment에서 signal 관련 부분을 찾아보시면 리스트가 있습니다.

(혹은 해당 시스템의 man page에서 함수를 하나씩 확인해 보셔도 됩니다. 웬만한 시스템이면 이 함수를 불러도 되는지 안되는지 나와있을 겁니다.)

ironiris의 이미지

출력하실때마다 fflush 함수를 실행하는 것은 어떨까요?
디버깅에 도움이 될것 같습니다.

mach의 이미지

귀차니즘발동시에는.....

모든 printf()뒤에 fflush(stdout)이라고 쓰는게 귀찮다면.....
프로그램의 시작부에
<span> setbuf(stdout, 0);</span>
이 한줄을 넣어주면, 라이버리수준의 버퍼링을 없앨 수 있습니다.
즉, stdout의 버퍼(출력버퍼) 크기를 0(널)로 해주기 때문에 버퍼링이 안되고, 즉시 출력하게 됩니다.

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

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

댓글 달기

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