2017-05-22 12 views
0

私はにLINX信号(http://linx.sourceforge.net/linxdoc/doc/html/linx.7.html)を送信する(コマンド「linxstat」を介して取得した)LINXプロセスのPIDがあります、私はPIDにLINX信号を送信する前に、(LINX-IPCプロトコル)PIDを持つプロセスがC++で動作しているかどうかを調べる方法は?

Cmn::Ipc<ASig> sig(A_SIG); 
sig->a = 10; 
sig->b = 20; 
sig.send(PID); 

をPIDが存在し、まだ実行中であることを確認したい(プロセスがクラッシュしていないことを確認する)。 PIDが存在しない場合は、PIDを0にする別の共通プロセスに送信します。このプロセスは、あらゆるタイプの信号を処理できます。 PIDがC++に存在するかどうかを確認する方法はありますか?はいの場合は、LINX APIとは何ですか?

プロセスの名前とプロセスのPIDだけを知らなくても、これを実行できます。

+3

ここにレースがあります。チェックを終えてから、信号を送信する前に、プロセスは停止することができます。 –

答えて

0

PIDを取得して、PIDチェックを実行し、シグナルターゲットプロセスを終了して、同じPIDを持つ新しい無関係なプロセスがPID番号の範囲が限定され、それらが時間の経過と共に再利用されるようにすることができます。だから私は、PIDだけであなたが望むものを達成することは不可能だと思います。

0

あなたが最初の信号0を送ることができます。

キル(2):

をsigが0であれば、何の信号が送信されませんが、エラーチェックがまだ行わ です。これは、プロセスIDまたはプロセスグループID の存在をチェックするために使用できます。

しかし、それはおそらく無意味です。さらに、この種のpidベースのアクセスは、あなたがプロセスの親でない限り、競合状態が起こりやすくなります(その場合は、終了したかどうか、またそれを刈り取ったかどうかは常に知っています)。

0

現在実行中であることを確認するにもかかわらず、確認してから信号を送信するまでの間に、または信号を送信してからそれが到着する時間。だから、信号を送信して、到着時にプロセスがそこにないかもしれないという事実に対処する方法を見つけてください。極端な場合には、プロセスは死ぬことさえあり、シグナルが到着する前にそのPIDを再利用することができます - それを扱うのが楽しいです。

関連する問題