add: struct sigaction ign_handler; ign_handler.sa_handler = SIG_IGN; sigemptyset(&ign_handler.sa_mask); ign_handler.sa_flags = 0;   sigaction(SIGPIPE, &ign_handler, 0); sigaction(SIGFPE, &ign_handler, 0);
context: int main(int argc, char *argv[]){  struct sigaction es_handler;  es_handler.sa_handler = ecasv_signal_handler;  sigemptyset(&es_handler.sa_mask);  es_handler.sa_flags = 0;  sigaction(SIGTERM, &es_handler, 0);  sigaction(SIGINT, &es_handler, 0);  sigaction(SIGQUIT, &es_handler, 0);  sigaction(SIGABRT, &es_handler, 0);  ecasv_parse_command_line(argc,argv);  ECA_CONTROL_INTERFACE eci;  eci.command("cs-add default");  eci.command("c-add default");  eci.command("cs-set-param -b:" + kvu_numtostr(ecasv_buffersize));  if (ecasv_format_string.size() > 0) {    eci.command("cs-set-audio-format " + ecasv_format_string);  }    string format;  if (ecicpp_add_input(&eci, ecasv_input, &format) < 0) return -1;  cout << "Using audio format -f:" << format << "\n";  ecasv_chcount = ecicpp_format_channels(format);  cout << "Setting up " << ecasv_chcount << " separate channels for analysis." << endl;    if (ecicpp_add_output(&eci, ecasv_output, format) < 0) return -1;    ecasv_eci_repp = &eci;  vector<struct ecasv_channel_stats> chstats;  eci.command("cop-add -evp");  eci.command("cop-add -ev");  if (ecasv_enable_cumulative_mode == true) {    eci.command("cop-set 2,1,1");  }  eci.command("cop-select 1");  if (ecicpp_connect_chainsetup(&eci, "default") < 0) {    return -1;  }  int secs = 0, msecs = ecasv_rate_msec;  while(msecs > 999) {    ++secs;    msecs -= 1000;  }  ecasv_output_init();  eci.command("start");  while(true) {    kvu_sleep(secs, msecs * 1000000);    ecasv_print_vu_meters(&eci, &chstats);  }  ecasv_output_cleanup();    return 0;}