私はアプリケーションA(ある会社Xによる)を持っています。このアプリケーションを使用すると、独自の関数を記述できるようになるため、機能を拡張できます。
アプリケーション A の構成ファイルでユーザー関数を呼び出すようにアプリケーション A に指示します (これにより、アプリケーション A がユーザー作成関数を呼び出さなければならないことがわかります)。アプリ A は、ユーザーが作成した関数を呼び出す前にアプリケーション A に登録する必要がある関数ポインターを使用します。
本番環境でユーザーが作成した関数にバグまたは障害がある場合、Appl A は機能を停止します。たとえば、ユーザーが作成した関数にセグメンテーション違反があるとします。
したがって、アプリケーション A は共有 DLL ファイルからユーザーが作成した関数をロードします。これは、ユーザーが作成した関数がアプリケーション A のプロセス アドレス空間で実行されることを意味します。
セグメンテーション フォールト、ゼロ除算、スタック オーバーフローなどの特定のシグナルを処理したいのですが、アプリケーション A には、このために記述された独自のシグナル ハンドラがあります。
アプリケーション A にほとんど影響を与えずに適切にクリーンアップできるように、ユーザーが作成した関数の例外をキャッチする独自のシグナル ハンドラーを作成するにはどうすればよいですか? ユーザー関数はアプリケーション A のプロセスで呼び出されるため、OS はユーザー関数ではなく、アプリケーション A で記述されたシグナル ハンドラーを呼び出します。
どうすればこれを変更できますか? 私は OS が自分の関数で記述されたシグナル ハンドラーを呼び出すことを望んでいますが、本質的に非同期である自分の関数によって生成されたシグナルに対してのみです。
注: 私はアプリケーション A のソース コードを持っていません。別の会社によって管理されているため、変更を加えることができません。
私は C を使用しますが、Linux、solaris、およびおそらく Windows プラットフォームでは C のみを使用します。