我有一个运行一些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);
//..
}
答案 0 :(得分:5)
有些东西正在向您的进程发送“用户定义的信号1”(我相信SIGUSR1
),此信号的默认操作是终止该进程。如果你想避免你需要停止发送信号的任何东西,安装信号的信号处理程序,或者用pthread_sigmask
阻止所有线程中的信号(例如在创建任何线程之前的main的开头)
由于您在问题中包含的代码与信号处理或发送信号无关,因此我无法更具体。