2016-04-08 13 views
0

私は、親プロセスがいくつかのスレッド(プラグイン)を起動するアプリケーションを持っています。そのうち1人は定期的に子プロセスを開始し、popenを使用してパイプを介して出力を読み取ります。子プロセスのパイプライン処理は、親プロセスへのシグナルでどのように動作しますか?

また、親プロセスは、SIGUSR1によって停止されている可能性があります。すべてのプラグインは、パイプを使用するものを除いて良好に停止します。read関数のどこかにSIGSEGVをスローします。

これは、子プロセスがSIGUSR1で停止してパイプが無効になるためだと思います。私は正しい?どうすればこの問題を解決できますか?

+0

読み取りプロセスから親プロセスがSIGSEGVによって強制終了されることを確認できますか? –

+0

@ ZangMingJie、はい、シグナルのハンドラがあるため実際には殺されません。どのようにしても、親プロセスは 'read'を呼び出している間にSIGSEGVを取得しました。 –

答えて

0

それはSIGSEGVが別の場所にあった原因のバグのように見えます:スレッド関数はpauseに設定されたコールusleep(pause)を有している

void unload() 
{ 
    stop_main_thread = 1; 
    usleep(100000); 
    LibLog::print("modem is disconnected"); 
} 

:私の前に誰かがこのようにunload機能をプログラムしていました500000.

unload関数は、共有ライブラリの1つに配置され、プログラムがシャットダウンしようとしているときに呼び出されます。したがって、unload関数が実行されると、so-fileはスレッド関数がアンロードされ、既知の結果でまだ何かをしようとします。

unloadusleepコールをpthread_joinに変更すると、私の問題は解決します。

関連する問題