gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:32:53 26 4
gpt4 key购买 nike

我有一个运行一些 pthreads 的程序,每个线程中都有一个 connect()recv()send()。问题是,有时它会突然关闭整个程序,并显示消息“用户定义的信号 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”(SIGUSR1 我相信),并且该信号的默认操作是终止该进程。如果您想避免这种情况,则需要停止发送信号的任何内容,为该信号安装信号处理程序,或者使用 pthread_sigmask 阻止所有线程中的信号(例如,在创建任何线程之前的 main 开头)。 .

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

关于c - 用户定义的信号 1 终止我的 POSIX 程序!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6467777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com