用户定义的信号1终止我的POSIX程序!

时间:2011-06-24 12:26:56

标签: c linux pthreads posix

我有一个运行一些pthread的程序,并且在每个线程中都有一个connect()recv()send()。问题是,有时它会突然关闭显示消息"User defined signal 1"的整个程序。它在Linux中使用POSIX线程在C中运行。代码就是这样:

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);

 //..
}

1 个答案:

答案 0 :(得分:5)

有些东西正在向您的进程发送“用户定义的信号1”(我相信SIGUSR1),此信号的默认操作是终止该进程。如果你想避免你需要停止发送信号的任何东西,安装信号的信号处理程序,或者用pthread_sigmask阻止所有线程中的信号(例如在创建任何线程之前的main的开头)

由于您在问题中包含的代码与信号处理或发送信号无关,因此我无法更具体。