こんにちは
ソフトな道を今日もほのぼのと歩きます。
少し前になりますが「[Linux] スレッド内で使用していたメモリがSIGINTによって壊されていた為でした。」
で進展がありましたので以下記載します。
今までの変更分
1.SIGINT処理ではprintf()は行ってはいけない
2. SIGINT処理で使用する変数型を変える
[変更前]
static int 型
[変更後]
#include <signal.h>
static volatile sig_atomic_t 型
3.ポインタで渡ってくるデータはローカル変数にコピーして使う。
Segmentation fault
のエラーが3日目に発生していました。
色々調べてみたところ、
プロセスをcloseしても、プロセスが一瞬入ってくるケースがありました。
これにより、openしている時に使用するapiがclose状態で実行されていたため、
想定外な動作の結果Segmentation faultのエラーになって表れていました。
対策としては以下を行うことで解決できました。
[対策]
1. close直前に"終了したことを表すフラグ"= 1にする。
2. close実行。
3. プロセス側で"終了したことを表すフラグ"を監視し1が立っていたら何もせずに抜ける。