2020年8月24日月曜日

[Linux] closeしても、プロセス実行が発生してしまう対策

こんにちは


ソフトな道を今日もほのぼのと歩きます。


少し前になりますが「[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が立っていたら何もせずに抜ける。



0 件のコメント:

コメントを投稿