• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:できるだけ多くのシグナルに対応したい)

シグナルに対応したロックファイル削除プログラム

kinokoyasan2004の回答

  • ベストアンサー
回答No.1

はじめまして。 自分はとあるHPを参考にして、以下のトラップを行っています。 意味がわからないんですが^^; とりあえず今のところは問題なく動いているんで、大丈夫かと。 参考にしてください。 $SIG{'TERM'} = $SIG{'PIPE'} = $SIG{'HUP'} = "END"; sub END{unlink("SE.FULLLOCK");}

参考URL:
http://tohoho.wakusei.ne.jp/wwwcgi8.htm
noname#25358
質問者

お礼

 ありがとうございます。  実際、レアケースだから難しいですね(^_^;  念のため、おっしゃるとおりにしてみました。  あとはエラーが起きないことを祈るのみ……(笑)

関連するQ&A

  • killコマンドについてお教えください。

    solaris初心者です。 killコマンドで、 kill -TERM pidで終了できないプロセスについては kill -KILL pidで強制的に終了することができます。 と他の者に説明したら、どうして終了できないのが あるのですかと聞かれました。的確に回答できませんでしたので、よい説明方法等ありましたらお教えください。 あとkill -INT pidについてもお教えください。

  • シェルで親プロセス終了時に子プロセスも終了させるには?

    シェルスクリプトを作っています. 親プロセス(AAA.sh)から子プロセス(BBB.sh)を呼び出した状態で,AAA.shをkillすると,BBB.shのプロセスが終了しないまま,残ってしまうため, http://oshiete1.goo.ne.jp/qa1968135.html を参考にkill -- -$$で同じプロセスグループのものが終了するように作ったのですが,BBB.shが呼び出される前にAAA.shをkillすると,プログラムが暴走してしまいます. どうすれば暴走せずに,親子ともども終了させることができるでしょうか??? *** AAA.sh *** #!/bin/sh func exit_AAA(){ kill -- -$$ exit 1 } trap "exit_AAA" HUP INT QUIT TERM echo "call BBB??(y/n)" read num ./BBB.sh *** BBB.sh *** #!/bin/sh echo "exit BBB?(y/n)>" read num

  • SIGTERMを検知するケースは?

    環境はLinux7.3です。 あるAとBというプロセスがいます。(AとBは親子関係ではありません。) Bプロセスで「signal(SIGTERM,関数C);」でシグナルの検知待ちをしています。 その状態でAプロセスプロセスに対してkillした場合(「kill AプロセスのPID」)、 Bプロセスでシグナルを検知して関数Cが実行されることはありえるのでしょうか?と、いうのが質問1です。 あと、SIGTERMを発行するケースをご存知の方ご教授下さい。 killコマンドで該当プロセスを殺す。該当プロセスの終了。のケースがあるのは調査しました。 上記以外にあるのでしょうか? 以上、よろしくお願いします。

  • killコマンドの終了と強制終了の違いについて

    私は、SUNのSolaris8を使っています。 現在動いているプロセスを、killコマンドを使って終了させる際に、 -9または-KILLオプションを付けると、強制終了を行いますよね。 そこで質問なのですが、そもそもプロセスの『終了』と『強制終了』の違いとは何ですか? とっても初歩的な質問だとは思いますが、いまいち理解できません。 よろしくお願いします。

  • シェルスクリプトでのエラー時の処理について

    HTMLにシェルスクリプトを実行するSSIを埋め込んで、 その実行結果をHTML側に出力する、という処理をしようとしております。 大まかな処理内容は、指定の場所のファイルの有無をチェックして それにより"ok"か"ng"かの文字列をHTMLに出力する、というものです。 ====以下、HTMLソース(前後省略)==== <br> 結果は:<!--#exec cmd="./output.sh" --> <br> ====ここまで==== ====以下、シェルスクリプトソース==== #!/bin/sh CHECKFILE=/aaa/bbb/check.txt TEXTA=ok TEXTB=ng if [ -f $CHECKFILE ] ; then echo $TEXTA else echo $TEXTB fi exit ====ここまで==== この処理自体は特に問題無さそうなのですが、 この中に途中で異常終了した際のエラー処理を組み込むことによって、 異常時には固定で"ok"を出力して終了するようにしたいのです。 trap "echo 'ok'; exit" HUP INT QUIT KILL TERM や trap "echo 'ok'; exit" 1 2 3 9 15 などのtrapを入れたりもしたのですが、 思い通りには動かず、結果を返すことなく終了してしまいます。 このような場合、trapに限らず何か良い方法はありますでしょうか。 何かご存知の方おりましたらご助言頂けますでしょうか。。 よろしくお願いいたします。

  • SIGTERMについて

    マルチプロセス処理で、 signal(SIGTERM,xxx) の処理を入れています。 プログラムを実行した後、コマンドラインから kill -TERM 親PID とたたき子プロセスまで殺すことはできるのですが、 これをコマンドラインではなく、 何かスクリプトを作成し、運用したいと思っています。 どなたかスクリプトの書き方をご教授頂けませんでしょうか。

  • シェルスクリプト trap処理の流れにつきまして

    シェルスクリプト作成しておりますが、 trap処理について質問がありますので、ご教授お願い致します。 以下、テストしたいと思っているスクリプトを記載いたします。 #!/bin/sh trap "echo 'stopped'" 1 2 3 15 echo start > test1.txt sleep 100 echo end > test1.txt 上記スクリプトを実行し、Ctrl+cもしくは、 kill -15 でスクリプトを削除した場合、 sleep中にスクリプト中断していると思うのですが、 end文字列がtest1.txtに書き込まれてしまいます。 trapが処理される流れというのは、どのような流れなのでしょうか。 また途中で中断しているのであれば、途中で以下処理を 行なわないようにするにはどうすればよろしいでしょうか。 宜しくお願いいたします。

  • Unixの親プロセスと子プロセスの関係について

    はじめまして。 親プロセスが終了するとそのプロセスから呼ばれた 子プロセスも停止するという認識は正しいでしょうか? というのも、あるシェルスクリプトを"kill -9"コマンドで強制終了させたのですが、そのシェルスクリプト内のコマンド(sleepコマンドです)は終了せずに残っていたので(psで確認しました)、??という感じでした。 さらにそのsleepコマンドの親プロセスが1(init?)になっていました。 色々とWEB上で調べてみたのですが、この動作について の記述を見つけることができませんでした。 どなたかご存知でしたら是非ご教授下さい。よろしくお願いします。

  • fork()で作られた子プロセスから親プロセスの生存を知る方法は?

    タイトルの通りなのですが、プロセスAから fork()で子プロセスBを作り、Bには無限ループで処理をさせます。 Aはユーザからの入力を受け、処理を行います。 Aが終了要求をされプロセスを終了するときに、 Bも同時に終了したいのですが、BからAの生存を判定して Aのプロセスが切れていたBも終了する、ということは可能でしょうか? Bの無限ループ処理では、ファイルの書き換えを行っているので AからBのPIDを指定してKillする、ということはせずに B自身で判定して終了するようにしたいのですが。。

  • UNIX_Cにおける「名前つきパイプ(FIFO)」のcloseとunlinkについて教えてください

    親プロセスと子プロセスで、「名前つきパイプ(FIFO)」を用いて、インターフェースを行う場合。 closeとunlinkで処理を終了させたいのですが、open時に一つのFIFOにつきreadとwriteの二つのIDが得られます。この二つのIDで必ず各々closeをしなくてはならないのか?または、一つのIDで一回closeを行えばよいのか? 回答をお願いいたします。