■ [shell][unix] flockコマンドを使用して二重起動を防ぐ Linux上でコマンドの二重起動を防ぐにはどうするか。flockコマンドを使うのがよさそう。 flockコマンドは指定ファイルをロックしてコマンドを実行するコマンド。-n オプションによりロック中の場合は直ちに処理を終了できる。 $ flock -n lock echo hello flockにはファイルではなくファイルディスクリプタを指定することもできて、この場合はそのファイルディスクリプタを閉じるまでロックが維持される。シェルスクリプトの中で排他制御を行うときはこのモードを使とよい。シェルスクリプト自身を入力用にオープンしてロックするのがお手軽。 #!/bin/bash set -e ( flock -n ${my_fd} || exit 1 sleep 5 echo hello ) {my_fd}< "$0"
シェルスクリプトの二重起動防止の方法でとても良く使われる方法は、以下のようなロックファイルを使用する方法です。 ・ロックファイルを使用した例 #!/bin/bash if [ -f .lock ] then # 既に起動済みのため終了 exit 0; fi trap 'rm -f .lock; exit 1' 1 2 3 15; touch .lock; # 任意の処理 rm -f .lock; しかし、このロックファイルを使う方法には問題があります。SIGKILL シグナルを受信して終了した場合、ロックファイルが削除されません。そのため、次回起動時にロックファイルが存在するので、シェルスクリプトを起動できなくなってしまいます。 SIGKILL シグナル(および SIGSTOP シグナル)はシェルスクリプト(プロセス)では捕捉できません。例えば、何らかの理由によりあるプロセスが暴走してしま
案外、UNIX系のC/C++での二重起動/多重起動防止について解説しているサイトがなかなか見つからず、サンプルも見つからないので以下URLを参考にさせて頂き pidfile でやる方法を以下にさくっと。 /var/run/[プログラム名]のファイルを開き、「ファイルが存在し、そのPIDのプロセスが起動している」なら二重起動。そうでなければ初回起動。 /var/run/[プログラム名]のファイルが無ければ作って、自分のPIDを書き込み。 この仕組みにより、Ctrl+Cなど予期せぬ終了にも対応です。 Cでやる方は、文字列処理をchar配列とprintf()に読み替えてください(丸投げ)。 #include <stdio.h> #include <stdlib.h> #include <iostream> int main() { { // 準備 string tmp_path = "/var/
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く