select 에서 인터럽트가 걸리네요..

hbsnow의 이미지

1. process 에서 select()를 한다
connect 가 들어오면 accept를 하고 thread 를 생성시킨다

2. thread에서 db insert(oracle)를 하고 나서 fgetc(stdin)를 하면
1에 프로세스에서 select중에 EINTR 이 잡히네요
오라클 db 작업을 안햇을때는 그런거 없었는데...
어쨋든 인터럽트를 쓰레드내에서 잡아내서 프로세스까지 안가게 할수 있는 방법없을가요?

datamind의 이미지

select 에서 EINTR 이 잡혀도 fd 검사를 잘하시면
문제가 없을듯 한데요... -.-;;

pynoos의 이미지

혹, oracle library 내에서 fork가 일어날지 모릅니다.

확인해보세요. 전에 그런경험이 있어서, oracle 호출하기 전에 signal handler를 대피시켰다가 다시 복원한 적이 있습니다.

indie의 이미지

8) 이게 맞을지 모르겠지만 오라클 디비에 접속시 디스크립터가 4개(?)열리는 걸로 알고 있습니다. 3갠가? 기억이 가물가물
select()에서 maxfd값을 수정해 보세요....

집에나 갈까?

hbsnow의 이미지

1. 시그널을 대피시켜라
: 무슨 말인지?

2. maxfd값을 조정해라
: maxfd는 기존 연결값으로 정의되어있는데요..
오라클에서 디스크립터를 더 열어서 사용한다고 해도
select에서 EINTR이 걸리는것과 무슨 관계가 있나요?

1. process : select()

1-1 thread :
db_connect();
insert();
db_disconnect();

recv or fgetc or sleep... 등에 system 콜 발생시
1에 process에 select()에서 EINTR이 잡힘(블럭풀림)

더 분석을 해보니 db_disconnect()를 빼면 정상
문제 코드 : SQL COMMIT WORK RELEASE;

SQL COMMIT WORK RELEASE 만 하면 그 다음 system call시 프로세스에 select()에 EINTR이 잡힘..

대안이 없을까요?

pynoos의 이미지

그 시그널이 무엇인지 trace 해보세요.

linux:strace, solaris:truss, hpux11:tusc

등을 사용하시면 됩니다.

hbsnow의 이미지

SIGCLD가 와서 프로세스로 전달되는것 같네요

이런경우 SIGCLD를 어떻게 처리하는게 좋은가요.

pynoos의 이미지

fork가 일어나는 부분은 어디인가요?

그리고, 어디던지 간에, select에서 SIGCHLD 때문에 -1로 error가 나오며, errno가 EINTR이라면 다시 select 하는 것을 처리해주는 것은 예외적인 상황이 아니며, 모든 서버 프로그램이 해야하는 일입니다.

만약 fork를 명시적으로하지 않았는데, library내에서 일어난다면, 아마 그 라이브러리 설명 어딘가에 signal handle을 해야한다고 씌어 있거나, 아니면, 라이브러리가 제대로 처리하지 못하는 까닭입니다.

보통 라이브러리 내에서 signal handler를 대피(signal, sigaction)시킨다음 fork한 뒤, wait 하여 fork 된 child를 접수한뒤, signalhandler를 복원시켜줘야합니다. 이 작업이 되어 있지 않나 봅니다.

signal handler를 대피시킨다는 말은 signal 함수의 return 값을 저장하였다가 다시 등록한다거나, sigaction의 마지막 인자 값을 받았다가 다시 넣어 주라는 의미입니다.

댓글 달기

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