Почему Linux всегда выводит «^C» при нажатии Ctrl+C?

Я изучал сигналы в Linux. И я сделал тестовую программу для захвата SIGINT.

#include <unistd.h>
#include <signal.h>
#include <iostream>
void signal_handler(int signal_no);
int main() {
  signal(SIGINT, signal_handler);
  for (int i = 0; i < 10; ++i) {
  std::cout << "I'm sleeping..." << std::endl;
  unsigned int one_ms = 1000;
  usleep(200* one_ms);
  }
  return 0;
}
void signal_handler(int signal_no) {
  if (signal_no == SIGINT)
    std::cout << "Oops, you pressed Ctrl+C!\n";
  return;
}

Хотя вывод выглядит следующим образом:

I'm sleeping...
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
^COops, you pressed Ctrl+C!
I'm sleeping...
I'm sleeping...
I'm sleeping...

Я понимаю, что при нажатии Ctrl+C все процессы в группе процессов переднего плана получают сигнал SIGINT (если ни один из процессов не игнорирует его).

Получается, что оболочка (bash) И экземпляр вышеуказанной программы оба получили сигнал? Откуда берется «^C» перед каждым «Oops»?

ОС — CentOS, а оболочка — bash.

7
задан WiSaGaN 26 May 2012 в 11:58
поделиться