私はC言語でプログラムを書いています。私はPOSIX共有メモリを使用するいくつかの子プロセスを作成しています。 今、プログラムがSIGINTのようなシグナルによって中断された場合に対処しようとしています。 私はシグナル機能をインストールする必要があり、コードの不一致のためにリソースをシグナルハンドラで直接解放するのは良くないので、ブールフラグを切り替えるだけでよいことになります。 私のメインコードは、フラグが切り替わるまでループします。シグナル割り込み時の空き共有メモリ
は、だから、このような何かを行く:
bool signal_interrupt = false;
void sig_handler(int sig_num)
{
signal_interrupt = true;
}
int main(void)
{
while (!signal_interrupt)
{
/* code, arguments processing, functions calling...*/
signal_interrupt = true;
}
}
私の問題は、私は、プログラムの一部の機能にリソースを解放する方法を見つけ出すことができないということです。関数のコードは、メイン関数に示されているのと同じループにあるべきですか?信号割り込みでプログラムがどのように反応するのですか?現在の関数からmainに戻り、シグナル関数が見つかるとそのハンドラが呼び出されますか? アドバイスありがとうございます、私は本当にこれを理解したいと思います。
あなたのプログラムがシグナルを受信すると、現在のシステムコールが取り消され、シグナルハンドラが呼び出されます。シグナルハンドラが完了すると、プログラムは中断された後の次のシステムコールに戻ります。 – strkol