重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

開発環境
OS:CentOS
DB:Oracle Database 11g
上で,Pro*Cを使用して,DBにアクセスする関数を作成しました(正確には,してもらいました).

上記で作成した関数を,別に作成したプロセスから呼び出しているのですが
プロセスの挙動が,期待しないものになります(ゾンビにはならないが,以降の動作をしない).
OracleのHPを見ると,Pro*Cは,signalをユーザプロセスに投げるように
読めます(SIGCHLD,SIGPIPE??)が,それ以上の情報を見つけられていません.

おそらく,Pro*Cを利用する場合の「お約束」があるのかと思いますが
どの辺を調べればいいかお教えください.

A 回答 (1件)

> 上記で作成した関数を,別に作成したプロセスから呼び出しているのですが



これが良く変わらないので何ともいえませんが
Pro*Cでシグナルを扱ったことがありますが普通に処理できましたよ
書き方も特に変わったことはいていませんでした。

DB関数のライブラリの部分をスタブにして普通のCで書いてみたら
ちゃんと動きますか?
以降の動作をしない というあたり割り込みが割り込みをよんでませんかね?

ちなみに、扱ったことがあるのは
SIGINT, SIGTERM, SIGCHLD, SIGUSER1 SIGUSER2です。

この回答への補足

>> 上記で作成した関数を,別に作成したプロセスから呼び出しているのですが

>これが良く変わらないので何ともいえませんが
mainを書いたのが私で,Pro*Cを書いたのが別の人という意味でした.
#DBを扱うコードを書いたことが無いもので...

>DB関数のライブラリの部分をスタブにして普通のCで書いてみたら
>ちゃんと動きますか?
おっしゃる通り,スタブ化すると正常に動作します.

>以降の動作をしない というあたり割り込みが割り込みをよんでませんかね?
あ!,そういうことですか.
sigaction()で他のシグナルはマスクしていますが,
ハンドラ内で,ログを取るためにPro*Cで作成した関数を呼び出しています.
確かにダメっぽいコードになってますね...
ハンドラ内で呼び出すのをやめてみます.
明日朝一番で試してみます.

ありがとうございます.

補足日時:2011/12/04 08:38
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。

おっしゃる通り,割り込みがループしておりました。
ありがとうございました。

お礼日時:2011/12/08 09:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す