Какой процесс погибает, когда я выполняю `ctrl + c`?

Я смутно и интуитивно понимаю, что Ctrl+C убивает процесс, который в данный момент выполняется в выбранном окне.

Я, однако, запутываюсь из-за разницы в том, какой процесс уничтожается, когда вызывается исполняемый файл и когда используется интерпретатор.

переводчик

Когда я использую переводчика. Например, если я открою R на терминале я вижу один процесс, который CMD (по вызову ps) является R, Когда я использую Ctrl+C, однако, R процесс не убивается, но процесс работает в R убит.

исполнимый

Когда я вызываю execuable, я вижу один процесс, который CMD (по вызову ps) является <nameOfExecutable>, Когда я нажимаю Ctrl+C, этот процесс прекращается.

Вопрос

Кажется, что существует какая-то иерархия процессов (и может быть правильная семантика, чтобы ссылаться на нее). Что именно делает Ctrl+C в свете этой кажущейся иерархии процессов?


Для вашей информации я использую Терминал 2.6.1 в Mac OS X 10.11.3

1 ответ

Решение

Я не уверен но ctrl + c должен отправить SIGINT сигнал к запущенному процессу. Обычно программы не имеют собственного обработчика для этого сигнала, и выполняется действие по умолчанию (программа убита). Я предполагаю, что интерпретатор перехватывает этот сигнал и просто прекращает выполнение запущенного скрипта.

Другие вопросы по тегам