シグナルをリッスンする実行中のプロセスの中断に関して質問があります。以下は私のハンドラーです。SIGHUP は設定ファイルのリロードに使用され、SIGCHLD は生成されたプロセスで nohang を使用して waitpid を使用し、その他はプロセスを終了するために使用されます。
void sig_handler( int sig, siginfo_t *siginfo, void *ucontext )
{
if ( sig == SIGHUP ) {
reload = 1;
} else if( sig == SIGCHLD) {
// TODO
} else if ( sig == SIGTERM || sig == SIGKILL || sig == SIGINT ) {
done = 1;
}
}
do {
if(reload) {
// opening files, doing file descriptor stuff
... // processing...
**SIHUP OCCURS! WHAT HAPPENS?** <<<<<<<<<<< Line: 505 <<<<<<<<<<<<<<<<<<
... // processing...
}
} while(!done);
私の現在の信号の理解:
- 信号発生
- 505 行目で現在の操作を完了します。つまり、open("t.txt");
- シグナル ハンドラー コードを実行して完了する
- 505行目に戻って続行
私が心配していること:
- 信号発生
- 現在のコードから抜け出す
- シグナル ハンドラー コードを実行して完了する
- コードのブレークアウトから続行
質問:
- シグナルが発生した場合にコードが不安定にならないように、構成のリロード中に SIGHUP、SIGTERM、SIGCHLD をブロックするようにコードを拡張する必要がありますか? それともオーバーデザイン?(その後再開しないと仮定して)
- SIGHUP のシグナル ハンドラーにいるとしますが、SIGHUP シグナルが発生すると、何が起こりますか? (それらをキューに入れ、ハンドラーを2回実行すると仮定します)
ありがとう!