2016-06-30 5 views
0

正常に戻るとき、またはexit()関数を呼び出すときに出力を生成するプログラムがあります(私はgcovをCプログラム)。特別な入力では、私のプログラムは無限ループでハングするので、終端信号を送ることによって終わらせなければなりません。この状況では、exit()を呼び出さないので、必要な出力が生成されません。exit()を呼び出して終了させるためのプロセスにシグナルを送る方法

実行中のプログラムにexit()を呼び出し、ソースコードに触れずに信号ハンドラを書き込むことなく強制終了できる方法はありますか?

+3

これをデバッガでアタッチし、 'exit()'を呼び出すように指示します。 – Barmar

+1

デフォルトの動作で 'exit()'を呼び出すようなシグナルはありません。シグナルが無視されるか、プロセスが直ちに終了するか、プロセスを一時停止するような特別なアクションが実行されます。 – Barmar

+0

共有ライブラリによって提供され、プログラムによって使用される関数の代わりに書き込むことができます。 'LD_PRELOAD'を使って置換関数をロードすると、条件をチェックして' exit() 'を呼び出すことができます。そうでなければ、元の関数を呼び出す可能性が最も高いでしょう。ここでの 'LD_PRELOAD'の詳細:http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trickこれは、置換された関数がプログラムをブロックするロジックで呼び出されることを意味します。 – alk

答えて

0

コメントで示唆したように、私はgdbの中で私のプログラムを実行し、信号を受信した後、私は手動でexit()と呼んで、それは魅力的に働いた。

関連する問題