バックグラウンド
私はCで共有ライブラリを作成しており、動的にリンクされています。これは、、、、などのLD_PRELOADプリロードされたアプリケーションからのネットワーク呼び出しをインターセプトしてオーバーライドすることを目的としています。socket()connect()recv()send()
ライブラリの初期化で、。を使用してスレッドを起動しますpthread_create()。このスレッドは、ユーザースペースにマップされているカーネルメモリをポーリングします。
ライブラリは、 netperf、iperf、sockperfなどのネットワーキングベンチマークアプリケーションを処理するのに十分な汎用性を備えていますが、これらに限定されません。
私の問題
すべてがうまく機能し、1つを除いてほとんどの場合人生は甘いです。デーモン化されたアプリケーション。たとえば、netserver ( netperfベンチマークアプリケーションのサーバー側)をデーモンとして、つまり-Dパラメーターなしで起動した場合、アプリケーションが最初に行うことの1つはを呼び出すことfork()です。フォークでは、親はを使用exit(EXIT_SUCCESS)して閉じられ、子は接続をリッスンします。親が終了するという事実は私のポーリングスレッドを殺します。
ですから、私が達成したいのは、親がいなくなった場合に、子に新しいポーリングスレッドを生成させることです。通話を傍受して無効にすることはできますfork()が、基本的に、親が行ったかどうかを子供に知らせるにはどうすればよいですか?ライブラリは汎用でなければならないので、私は何の仮定もできません。
ありがとう。