こんにちはで扱うことができ、私のLD_PRELOADedライブラリーと呼ばれるsignal.soをし、それがこのようなコードです:はlighttpdのに信号を送信し、私はLD_PRELOADedライブラリとlighttpdのサーバーを実行したい:)信号がLD_PRELOADedライブラリが
#include <signal.h>
struct sigaction sgSA;
static void handler(int signo, siginfo_t *si, void *ptr)
{
if(signo == SIGHUP)
printf("Get a signal -- SIGHUP\n");
}
sgSA.sa_flags = SA_SIGINFO;
sigemptyset(&sgSA.sa_mask);
sgSA.sa_sigaction = handler;
if (sigaction(SIGHUP, &sgSA, NULL) == -1)
handle_error("sg sigaction");
raise(SIGHUP);
と私はコマンドを使用してライブラリを使用してプログラムを実行します。
$sudo LD_PRELOAD=./signal.so ./lighttpd -f /usr/local/lighttpd/config/lighttpd.conf
それが文字列「信号を取得する - SIGHUP」を印刷していない、と私は代わりにlighttpdの別の簡単なプログラムでこれを試してみましたサーバーでは、実際にこの文字列を印刷できます。これは私をたくさん吹き飛ばした。ですから、私の質問は、私のシグナルがLD_PRELOADedライブラリのハンドラによって処理されるようにするにはどうしたらよいですか? Tks!
まず、ライブラリが 'LD_PRELOAD'-edであるかどうかを確認してください(setuidバイナリは無視します)。また、 'lighttpd'は後でハンドラをリセットして、' signal'と 'sigaction'を傍受してそのように見えるようにします。 – yugr
私は特定のレスソンを確認していませんが、lighttpdは常に自分自身のハンドラにトラップしているようです。したがって、代わりに予約信号SIGUSR2を使用して解決できます。あなたの提案をありがとう。 –