2012-04-24 12 views
0

マイシグナルハンドラは次のようになります。Cでデーモンを停止

volatile sig_atomic_t loop  = 1; 

void handle() 
{ 
    loop = 0; 
} 

そして、私のようであるデーモンがあります。

void _start_() 
{ 
... 
sa.sa_handler = handle; 
sigaction(SIGINT, &sa, NULL); 
while(loop) 
{ 
    //add a line to a file 
} 
... 
} 

私のような別の関数から、デーモンstopにしたいの。

void _stop_() 
{ 
    raise(SIGINT); 
} 

私の考えは、その後whileloopの値が0で何とかならば、ありますfalseと評価され、デーモンは終了します。どのように私はこれを達成することができます

_start_(); //daemon starts 
//computation 
_stop_() //daemon stops writing to the file. exits 

: は、私は次のようにこの2つの関数を使用するように計画していますか?問題は私が_stop_()からデーモンを停止できないことです。

おかげ

+0

デバッガでプログラムを見てみましたか? –

+0

詳細を教えてください。 – Sayan

答えて

2

は、あなたのデーモンとは別のプロセスから呼び出さ_stop()関数のですか?そうであれば、シグナルを送るプロセスのIDを知る必要があります。通常の方法は、デーモンがプロセスIDをファイル(PIDファイル)に書き込むことです。このファイルは、デーモンを停止するプロセスが読み取ることができます。

+0

質問を更新しました。 '_start _()'関数はデーモンであり、 '_stop _()'関数はシグナルを送出してデーモンを停止しようとします。 – Sayan

+0

"通常は、デーモンはそのプロセスIDをファイル(PIDファイル)に書き込みます。このファイルは、デーモンを停止するプロセスが読み取ることができます。 - あなたは私がpidを読めるようにするつもりですが、 '_stop _()'からpidを読んでからkillする必要がありますか? – Sayan

+0

"私はちょうどpidを読んでから殺す必要がありますか?"はい。 –

関連する問題