2009-03-12 4 views
6

私は2つのプログラムの間でipcとしてメッセージキューを使用しています。 今私は、メッセージキューを使用して、あるプログラムから別のプログラムにデータを送信し、それからシグナルSIGINTを通して親密にしたいと思っています。あるプログラムから別のプログラムに信号を送る方法は?

あるプログラムから別のプログラムに信号を送信する方法はわかりません。 解決策があれば誰でもplsにサンプルコードを提供できますか?

答えて

5

Linuxのシグナルは、killシステムコールを使用して送信することができます。キックシステムコールの例と例については、linkを参照してください。あなたは-2人も殺すのを見ることができます。そして、それはこのとき、sigqueue()システムコールを使用することによって、あなたは信号とともにデータの余分な部分を渡すことができることをSIGINT利用SIGUSR1またはSIGUSR2

+0

私が追加したいのは、標準信号であるため、使用することはお勧めできません。 SIGTRMINから始まるリアルタイム信号を使用する方が良いでしょう。彼らはいくつかの重要な利点を持っています。 – Tebe

11
#include <sys/types.h> 
#include <signal.h> 
int kill(pid_t pid, int sig); 
+0

このプログラムで他のプロセスのPIDを取得する方法。 – Chaithra

+1

これを行うにはいくつかの方法があります。一方がもう一方の親であれば、親はfork()を呼び出すときに親のpidを取得し、親はgetppid()で親を取得できます。そうでない場合は、pidを合意された場所に置くことができます。たとえば、一方が他方に対して書き込むファイル。 –

+0

はい。 OK。しかし、他のプログラムであれば..?どのようにそのプログラムにprocessidを送るのですか?ソケットを使って送ることはできますか? – Chaithra

-4
system("kill -2 `pidof <app_name_here>` "); 
+1

これはあるプロセスから別のプロセスに信号を送信するための非常に面倒な方法です。 kill()またはsigqueue()システムコールの使用はどうですか? – slacy

1

注意を使用することをお勧めしません。値引数が 信号と を送信するデータの 添付アイテム( 整数またはポインタ値のいずれか)を指定するために使用される

、および:ここで「男2とき、sigqueue」から簡単に引用ですこれは2つのプロセス間での情報の小さなビットを通過するための非常に便利な方法である

 union sigval { 
     int sival_int; 
     void *sival_ptr; 
    }; 

次のタイプを有しています。私は上記のユーザーに同意します - SIGUSR1またはSIGUSR2と良いsigvalを使用し、あなたが好きなものを渡すことができます。

また、sival_ptrを介して共有メモリ内のオブジェクトにポインタを渡して、より大きなオブジェクトをそのように渡すこともできます。

関連する問題