そのマシン上で動作している別のインスタンスを認識し、それと通信してから終了する必要があるプログラムを作成する必要があります。私は、Linuxでこれを行う標準的な方法があるかどうかを知りたい。同じプログラムの他のプロセスをプロセスに認識させる方法
私の最初の考えは、プログラムのPIDを含んでいるファイルを書き、プログラムが実行されるたびにそのファイルを探すことでしたが、そのファイルの "正しい"場所と名前はどこですか?より良い、またはより "正しい"方法がありますか?
私は、ユーザーがそれを実行しようとしたと伝えなければなりませんが、別のインスタンスがあるので、ジョブを引き継いで終了します。私はSIGUSR1のようなシグナルを送ることを考えましたが、それはユーザーが第2のプロセスを実行した場所からのX11ディスプレイのような、より多くの情報を送ることを許しません。この情報を送信するには?
プログラムはGtkとリンクしているので、glibを使用するソリューションはOKです。
pidファイルだけではほとんど役に立たないです。アプリケーションがクラッシュした場合、pidファイルが削除されないため、手動で削除する必要があります。より良いオプションは、プロセスが何とか終了したときにOSが常にロックを解除するため、pidファイルをロックすることです。 'ls -la'を実行することでロックを見ることはできません。 Unixドメインソケットだけで十分です。 –
@Maxim:False。 'unlink(...)'は、ファイルが閉じられた後にファイルを削除します。だから 'fd = open(path、...); unlink(path); 'は、一時ファイルを持つ通常のトリックです。 – Alexandru
@Alexandru:ほとんどの場合、一時ファイルではなくpidファイルについて議論していたという事実を忘れてしまった。アプリケーションが終了する前に、pidファイルを削除してはいけません。 –