私はCでマルチスレッドアプリケーションを作成しました。すべてのシグナルを捕捉するためのものとクライアント接続のaccept()
-を作成するものの2つのスレッドが作成されています。 killproc
を使用してアプリケーションを終了すると、accept
呼び出しのスレッドは中断されません。どうすれば修正できますか?あなたが中断システムコールの使用を参照してくださいここでブロッキングaccept()コールを中断する方法
int stop_exec=0;
sigCatcherThread()
{
int sig
sigset_t allsignals;
sigfillset(allsignals);
do{
sigwait(&allsignals, &sig);
if(sig==SIGTERM)
stop_exec=1;
}while(!stop_exec)
}
clientHandler()
{
...
while(!stop_exec)
{
accept(...);
}
main()
{
pthread_create(..., sigCatcherThread,..);
pthread_create(..., clientHandler,...);
}
** self-pipe trick **を使用してください。[here] [1]を参照してください。 [1]:http://stackoverflow.com/questions/7016977/how-can-i-cancel-a-blocking-call-such-as-select-or-read –
修正するものは何もありません。信号を取得するためにスレッドが必要な理由がある場合は、それを説明してください*を修正する方法を教えてください*。 –