私は 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;
}
}
私の問題は、プログラムの一部の機能でリソースを解放する方法がわからないことです。関数のコードは、メイン関数に示されているのと同じループにある必要がありますか? プログラムは信号割り込みにどのように反応しますか? 現在の関数からメインに戻り、シグナル関数が見つかった場合、そのハンドラーが呼び出されますか? アドバイスをありがとう、私は本当にこれを理解したいです。