Ctrl + c не будет убивать процесс

Я искал ответы и до сих пор не нашел ничего, чтобы ответить на мой вопрос. Я сейчас вхожу в систему на свой сервер Ubuntu, и после запуска процесса я не могу запускать какие-либо прерывания на нем. Вот мой stty -a:

user@Ubuntu1:~$ stty -a speed 38400 baud; rows 93; columns 200; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; 

У меня нет ничего в моем .bashrc, который меняет прерывания.

Это то же самое для всех пользователей, включая root. Я также пробовал войти в систему из разных мест, используя разные терминалы, и каждый раз при появлении такого же результата. Я использовал как ssh, так и ssh -X для входа в систему.

Изменить: локально все мои прерывания работают нормально.

Обновление: я все еще ищу ответ. У моего друга такая же проблема. Проблема в том, что при входе в систему (с ПК, Mac, Linux) клавиатура не поднимает эти ключи (даже при правильном отображении).

Вот несколько хардкорных трюков:

 Control-Z 

он приостановит ваш процесс и вернет вам идентификатор задания этого процесса

Затем:

 kill -9 %1 

(замените 1 своим идентификатором задания).

Примечание: Процент является обязательным !, иначе вы убьете свой процесс init, что означает, что вы убьете ядро, и вся система выйдет из строя (поэтому не помещайте промежуток между ними 🙂

ctrl + c никогда не убивает программу,

Это просто не то, что он делает.

Существует набор сигналов, которые определяют стандарт POSIX, которые используются для управления запущенной программой.

  First the signals described in the original POSIX.1-1990 standard. Signal Value Action Comment ────────────────────────────────────────────────────────────────────── SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process SIGINT 2 Term Interrupt from keyboard SIGQUIT 3 Core Quit from keyboard SIGILL 4 Core Illegal Instruction SIGABRT 6 Core Abort signal from abort(3) SIGFPE 8 Core Floating point exception SIGKILL 9 Term Kill signal SIGSEGV 11 Core Invalid memory reference SIGPIPE 13 Term Broken pipe: write to pipe with no SIGTERM 15 Term Termination signal 

http://man7.org/linux/man-pages/man7/signal.7.html

ctrl + c посылает сигнал 2 , «Прерывание с клавиатуры» на программу, запущенную с терминала.

Это полностью зависит от программы для обработки этого сигнала, он может делать все, что захочет. Многие интерпретаторы языка сценариев могут обрабатывать это по умолчанию, убивая вызываемый скрипт и изящно выходя.

Если вы хотите, чтобы программа выходила, особенно из автоматического контекста, рекомендуется пение 15, программа kill может использоваться для отправки сигналов в процесс по id (pid).

 kill -15 <pid> 

Насколько мне известно, программа по-прежнему получает этот сигнал сама по себе, и должна прекратиться как можно скорее, как только это возможно.

Если программа игнорирует сигнал 15, хотя, и программа продолжает жить (и вы не можете отправить сигнал из-за ошибки разрешения)

 kill -9 <pid> 

Сигнал 9, насколько мне известно, интерпретируется ядром (диспетчер задач и аппаратный интерфейс), ядро ​​внезапно прекращает обработку программы и де-распределяет / освобождает все свои ресурсы.

Ctrl + c не будет убивать процесс. он просто остановит текущий текущий процесс посередине. Чтобы убить процесс, нам нужно использовать команду «KILL»

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

Если вы просто хотите убить этот процесс извне, вы можете использовать kill, просто остерегайтесь того, что вы должны эскалировать убийство, как описано в этой статье, о процессах убийства , а не просто перейти к самому экстремальному kill -9.

Википедия – отличный ресурс для программы убийства . Также приведен список сигналов Unix и что они делают.