Опрос является мертвым блоком в libpq, когда приложение запускается с демоном - PullRequest
0 голосов
/ 29 мая 2019

У меня есть приложение, которое использует pqxx и libpq для подключения к postgresql, все отлично работает в режиме, не являющемся демоном, но однажды демонизировав приложение, после выполнения некоторых запросов функция опроса заблокирована в libpq, как это можно сделать Я решил эту проблему?

Ниже код используется для daemonize:

void daemonize() 
 { 
    pid_t pid; 
    if ((pid = fork()) < 0)  
    { 
       // fork() failed 
       ErrLog(<<"fork() failed: "<<strerror(errno)); 
       throw std::runtime_error(strerror(errno)); 
    } 
    else if (pid != 0) 
    { 
       // parent process done 
       exit(0); 
    } 
    if(chdir("/") < 0) 
    { 
       ErrLog(<<"chdir() failed: "<<strerror(errno)); 
       throw std::runtime_error(strerror(errno)); 
    } 
    // Nothing should be writing to stdout/stderr after this 
    close(STDIN_FILENO); 
    close(STDOUT_FILENO); 
    close(STDERR_FILENO); 

    if(mPidFile.size() > 0) 
    { 
       std::ofstream _pid(mPidFile.c_str(), std::ios_base::out | std::ios_base::trunc); 
       _pid << getpid(); 
       _pid.close(); 
    } 
 }
...