2011-06-24 4 views
-1

私はいくつかのpthreadを実行するプログラムを持っていて、すべてのスレッドにはconnect(),recv()send()があります。問題は、メッセージ"User defined signal 1"を表示しているプログラム全体を偶然に閉じてしまうことがあることです。ユーザ定義信号1は私のPOSIXプログラムを終了させます!

pthread_mutex_t cur_lock; 
int stop = 0; 

void SocketsFunction(){ 
//.. 
connect(); 
while(recv()<0) 
{ 
    //do stuff 
send(); 
} 
close(); 
return NULL; 
} 

void job() 
{ 
//.. 
while (!stop) 
{ 
    if (something) 
       //.. 
    else 
    { 
     stop = 1; 
     break; 
    } 

    pthread_mutex_unlock(&cur_lock); 

    SocketsFunction(); 

    pthread_mutex_lock(&cur_lock); 
} 

pthread_mutex_unlock(&cur_lock); 

return NULL; 
} 

main(){ 
//.. 
pthread_mutex_init(&cur_lock, NULL); 
//.. 
for(i = 0; i < 30; ++i) 
    pthread_create(&pID, NULL, job, NULL); 

//.. 
} 

答えて

5

何かがあなたのプロセスに「ユーザー定義信号1」(SIGUSR1私は信じている)を送信され、この信号のデフォルトの動作:これは、POSIXスレッドを使用して、Linux上で実行され、Cのコードでは、そのようなものですプロセスを終了することです。シグナルの送信を停止する必要がある場合は、シグナルのシグナルハンドラをインストールするか、すべてのスレッド(たとえば、スレッドを作成する前にメインの先頭にあるシグナル)をブロックしてpthread_sigmaskにブロックする必要があります。

あなたの質問に含まれているコードは、シグナルの処理やシグナルの送信とは関係がないため、具体的には具体的なものではありません。

+0

あなたの考えは、プログラムを実行しているときにmain関数でpthread_sigmaskを初期化するということです。 – Brian

関連する問題