# 私も細かなことはかなり忘れてしまっています。 歯切れの良いことが書けずにすみません。
> perlの処理を行う前にsql*plusを使用しているのですが、そこでエラーが起こった場合、trapで処理しているのです。そこでシグナルを使用しているのですが・・。
どうも、やりたいことが見えてこないのですが。
以下の2点が解る様にご説明願えませんか?
1 「他人が書いたソフトがそうなってる」のか「ご自分で決めたこと」なのかの区別。
2 登場するプロセスには何があるのか? シグナルの発生と捕捉はどのプロセスでの事なのか? (Shellスクリプトから起動したコマンドやスクリプトは全て別プロセスって言うのは理解されてすよね?)
> 初歩的な質問かもしれませんが、シェルから呼び出したスクリプトなどで戻り値として数字を返すと、それはシグナルとして認識されてしまうのでしょうか?
スクリプトの種類(bash か perl か)によって細かな違いはあるでしょうが、 exit はそのスクリプトを終了させるための手段です。 exit を発行すると「プロセスの終了」という捕捉可能なシグナルが発生する場合はあるかも知れませんが、そのシグナルは exit 起因とは限りません。 もちろん、 「exit 13」で13番シグナルは発生しません。
P.sh という bash スクリプトが内部で C.sh を呼んだとします。 C.sh が 「exit 13」で終了したとき、P.sh でその「13」を知る普通の方法は、前回も書いた $?という変数の参照です。
試してませんが、P.sh で、C.sh の呼出前に 「set -e」を実行しておけば、 C.sh が 0 以外で exit したときに P.sh も即座に終了するんではないかと思います。 その「P.shの終了」は、P.sh 中に書いた trap で捕捉できるかも知れませんが、C.sh の終了コードを知る方法は、ちょっと解らないです。
# シグナルは結構難解です。 勉強のためにあえてチャレンジするなら別ですが、普通はシグナルを使わずに済む方法を探す方が良いケースが多いと思いますよ。
|