Как клавиши Ctrl+C ведут себя в TCP-соединении

Я изучаю сеть и, в частности, tcp-соединение, и мне интересно, в какой ситуации вы подключаетесь удаленно к серверу, используя tcp-соединение и отправляете командную строку для выполнения некоторых действий. Как они обрабатывают отправку сигналов ctrl+c?
Это отправляет обычный пакет TCP, который в разделе данных описывает Ctrl+C попаданий?
или это отправляет пакет, который имеет RST флаг включен или FIN флаг обрезать или закрыть соединение?

1 ответ

Решение

Нет такой вещи как отправка сигнала по TCP.

Ctrl+C - сигнал, генерируемый терминалом. Предполагая, что вы (или запущенный процесс) не изменили настройки терминала, это означает, что драйвер терминала преобразует комбинацию клавиш Ctrl+C в kill(x, SIGINT), где x является идентификатором группы процессов приоритетной группы процессов (и как таковой, SIGINT доставляется каждому процессу в группе процессов переднего плана, которая, в вашем случае, вероятно, является всего лишь одним процессом).

То, что делает процесс при доставке сигнала, не является задачей водителя терминала. Процесс, возможно, проигнорировал сигнал, поэтому ничего не происходит. Или он мог установить обработчик сигнала и выполнить некоторую работу внутри обработчика сигнала (например, записать что-то в сокет, что при чтении получателем вызовет его отправку SIGINT для себя - это эмулирует "удаленную доставку сигнала"). Или он мог заблокировать сигнал - в этом случае сигнал доставляется, когда процесс разблокирует его, или он отменяется, если процесс игнорирует его в это время.

Если, с другой стороны, вы (или запущенный процесс) изменили настройки терминала таким образом, что Ctrl+C не интерпретируется как комбинация клавиш, генерирующих сигнал, тогда процесс будет читать Ctrl+C из ввода. Конечно, то, что происходит, зависит от того, что процесс делает с вводом, который он читает.

Короче говоря, если вы не изменили поведение по умолчанию для SIGINT и вы не изменили настройки вашего терминала, Ctrl+C повышает SIGINT; действие по умолчанию - завершить процесс, поэтому сокет будет закрыт, а соединение разорвано.

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