0

私のシグナルハンドラは次のようになります。

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);
}

私の考えでは、どういうわけか、の値loopが0の場合、はwhilefalseと評価され、デーモンが終了します。私はこれらの2つの機能を次のように使用することを計画しています。

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

どうすればこれを達成できますか?問題は、デーモンをから停止できないことです_stop_()

ありがとう

4

1 に答える 1

2

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

于 2012-04-24T03:04:40.063 に答える