一度に複数回呼び出されないようにするために、ラップする必要がある実行可能ファイル (ソースなし) があります。ある種のキュー ラッパーをすぐに思いつきますが、実行可能ファイル自体の代わりにラッパーが呼び出されるように実際に作成するにはどうすればよいでしょうか。これを行うより良い方法はありますか?ユーザーは他のアプリケーションであるため、ソリューションは非表示にする必要があります。情報/推奨事項は大歓迎です。
2 に答える
ユーザーが他のアプリケーションの場合は、実行可能ファイルの名前を変更し (例: name -> name.real)、ラッパーを元の名前で呼び出すことができます。一度に1回だけ呼び出されるようにするために、pidof
コマンド(例:)を使用しpidof name.real
て、プログラムがすでに実行されているかどうかを確認できます(pidof
実際には、実行中のプロセスのPIDが得られるためkill
、それに信号を送ります)。
方法 1: 実行可能ファイルを標準パス以外の場所に配置します。センチネル ファイルをチェックし、センチネル ファイルが存在しない場合はプログラムを実行し、ptogram が完了するのを待ってから、センチネル ファイルを削除するシェル スクリプトを作成します。センチネル ファイルが存在する場合、スクリプトは短い遅延 (1 秒? このプログラムの標準的な実行時間は? その半分) でループに入り、センティネル ファイルを再度チェックします。
方法 2: スクリプトと同じことを行う別のプログラムを作成しますが、代わりにシステム レベルのセマフォまたはロックを使用します。ファイルに対して単純に読み取り/書き込みロックを使用することもできます。プログラムは実際のプログラムで fork() と exec() を実行し、番兵をクリアする前に子の終了を待ちます。