Определяемый пользователем сигнал 1 завершает мою программу POSIX! - PullRequest
0 голосов
/ 24 июня 2011

У меня есть программа, которая запускает некоторые потоки, и в каждом потоке есть 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 Ответ

5 голосов
/ 24 июня 2011

Что-то отправляет «Определенный пользователем сигнал 1» (SIGUSR1 Я полагаю) вашему процессу, и действие по умолчанию для этого сигнала - завершить процесс. Если вы хотите избежать того, что вам нужно либо остановить то, что посылает сигнал, установить обработчик сигнала для сигнала, либо заблокировать сигнал во всех потоках (например, в начале основного потока перед созданием каких-либо потоков) с помощью pthread_sigmask.

Поскольку код, который вы включили в свой вопрос, не имеет ничего общего с обработкой сигнала или тем, что посылает сигнал, я не могу быть более конкретным.

...