Q:

SIGINT ignored while calling system(3)

I have a process with a thread that calls for example: system("ping -qnc 1 192.168.1.1") in a loop. 
When I do CTRL +C, SIGINT is ignored as per the documentation:

During execution of the command, SIGCHLD will be blocked, and SIGINT and
  SIGQUIT will be ignored, in the process that calls system() (these signals will be handled according to their defaults inside the child process that executes command). 

Why is this, and what can I do to exit my process with CTRL +C? 

A:

Your process has those signals blocked so that when the user presses Ctrl-C ping will be killed without your program also being killed. 
If you want your program to be killed you can check system()'s return value and see if ping was killed due to a signal.  If it was you can take appropriate action. 
int status = system("ping -qnc 1 192.168.1.1");

if (WIFEXITED(status)) {
    std::cout << "ping exited with exit code " << WEXITSTATUS(status) << std::endl;
}
else if (WIFSIGNALED(status)) {
    std::cerr << "ping killed by signal " << WTERMSIG(status) << std::endl;
    exit(1);
}
else {
    std::cerr << "ping exited for some other reason" << std::endl;
}

