アプリ版:「スタンプのみでお礼する」機能のリリースについて

環境 linux(redhat) 使用シェル bash
シェルスクリプトAとシェルスクリプトBを作成し、
シェルスクリプトAが動作している間は、シェルスクリプトBの動作を禁止したいと考えています。
例えば、シェルスクリプトAが起動している状態で、シェルスクリプトBが起動されたとき、シェルスクリプトBは、シェルスクリプトAが起動していることを検知して、自発的に処理を終了するようにしたいと考えています。
上記のような仕組みをシェルスクリプトで実現可能でしょうか?
基本的には、シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。
(シェルの異常終了時は、ロックが自動的に解放されることが望ましい)
上記のようなことをシェル(bash)で実現可能でしょうか。
bash単独での方法、もしくはbashからperl,C言語作成の実行モジュールを呼び出す方法でもかまいません。
(ちなみにperl(もしくはC言語作成のモジュール)単独では実現可能なことはわかっています)

A 回答 (2件)

lockfileコマンドでいけるのではないかと。


詳しくはman lockfileをご覧下さい。

ただ、異常終了時は少し困りますね。
trapコマンドでシグナルを捕捉することはできますが、
SIGKILLは捕捉できないです。
まぁ、どうしようもないですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。lockfileコマンドがあるとは知りませんでした。これでやってみます。

お礼日時:2009/02/27 22:06

自分がよく使っていた方法としては、



・シェルスクリプトA起動時に、/var/runにPIDを書いたファイル(shella.pid)を書き出す。終了時に削除する
・シェルスクリプトB起動時に前述のファイルがあるかどうかをチェックする

って感じでした
異常終了したりしてPIDファイルが残ったりするとダメですが
シェルスクリプトA自身でもファイルの存在をチェックすれば2重起動の防止にもなります

単純に、

> シェルスクリプトの先頭で、ある資源のロックを行い、終了時にロックの解放ができれば、その仕組みは実現可能と考えています。

の「ある資源」=ファイルで実現しているだけですね
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
#1のかたの方法で試してみますが、それで、だめな場合の候補とさせていただきます。

お礼日時:2009/02/27 22:13

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