Я искал ответы и до сих пор не нашел ничего, чтобы ответить на мой вопрос. В настоящее время я захожу на свой сервер Ubuntu и после запуска процесса я не могу запустить ни одно из прерываний на нем. Вот мой стиль:
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) клавиатура не воспринимает эти клавиши (даже если они правильно сопоставлены).
источник
Ctrl+V
и попаданиеCtrl+C
? Вы пытались убить процесс сkill -s 2 <pid_of_process>
? Это должно быть равным отправке сигнала SIGINT процессу. Проверьте настройки ключа эмулятора терминала.Ctrl+C
во время запуска другого процесса (напримерcat
)? Может быть, это тот процесс, который игнорируетCtrl+C
. Или вы имеете в виду, что локально на сервере Ubuntu этот конкретный процесс отвечаетCtrl+C
, и в каком случае в каком терминале вы пытались? Как насчетscreen
сессии?kill -s 2
(обратите внимание-s 2
, что этоSIGINT
(сигнал, который обычно посылается при нажатии Ctrl + C, по умолчанию дляkill
isSIGTERM
)), то команда не игнорирует прерывание. Что-то еще поднимает это. Когда вы запускаете это локально, и оно работает, вы говорите, что оно работает с использованием одного и того же терминала на клиентском компьютере для выполнения чего-либо локально или запуска эмулятора терминала локально на сервере? Интересно, используете ли вы какой-нибудь эмулятор, который пытается имитировать Ctrl + C из мира Windows ...Ответы:
ctrl+ cникогда не убивает программу,
Это просто не то, что он делает.
Стандарт POSIX определяет набор сигналов, которые используются для управления работающей программой.
- http://man7.org/linux/man-pages/man7/signal.7.html
ctrl+ cпосылает сигнал
2
«Прервать с клавиатуры» программе, которую вы запускаете с терминала.Программа полностью обрабатывает этот сигнал, она может делать с ней все, что захочет. Многие интерпретаторы языка сценариев могут обрабатывать это по умолчанию, убивая вызываемый сценарий и корректно завершая работу.
Если вы хотите, чтобы программа выходила, особенно из автоматического контекста, рекомендуется
kill
использовать singal 15, программу можно использовать для отправки сигналов процессу по id (pid).Насколько я знаю, программа все еще сама получает этот сигнал и должна как можно быстрее завершать работу как можно скорее.
Однако, если программа игнорирует сигнал 15, и программа продолжает жить (и вы не можете отправить сигнал из-за ошибки разрешения)
Насколько мне известно, сигнал 9 интерпретируется ядром (диспетчером задач и аппаратным интерфейсом). Ядро резко останавливает обработку программы и освобождает / освобождает все ее ресурсы.
источник
Вот какой-то хардкорный трюк:
он приостановит ваш процесс и вернет вам идентификатор работы этого процесса
Затем:
(замените 1 своим идентификатором работы).
Примечание: Процент обязателен! Иначе вы убьете процесс инициализации, что означает, что вы убьете ядро, и вся система выйдет из строя (поэтому не ставьте пробел между :)
источник
Ctrl + c не остановит процесс. это просто остановит текущий рабочий процесс в середине. Чтобы убить процесс нам нужно использовать команду "KILL"
источник
kill
посылает сигнал процессу. Не убивает его. Сигнал по умолчанию, отправленный с,kill
являетсяTERM
, сигнал, отправленный сctrl+c
являетсяSIGINT
.Я наткнулся на этот старый пост на форуме об этой конкретной проблеме. Кажется, последовательность прерываний по умолчанию может быть переопределена где-то в отдельном конфигурационном файле.
Если вы просто хотите убить этот процесс извне, вы можете использовать kill, просто остерегайтесь того, что вам следует наращивать kill, как описано в этой статье о процессах уничтожения , а не просто переходить к самому экстремальному уничтожению -9.
Википедия - отличный ресурс для программы kill . Также вот список сигналов Unix и что они делают.
источник