Что делать, если Ctrl-C не убивает запущенную работу?

Иногда процессы игнорируют сигнал SIGINT, отправляемый Ctrl - C в Bash. Например, man и vi. Предполагая, что вы не хотите гуглить или читать руководство по выходу из запущенного процесса, есть ли какая-нибудь последовательность клавиш, которая будет работать всегда (не покидая терминала)?

99
задан 7 December 2010 в 20:00

8 ответов

Отправьте сигнал SIGQUIT с Ctrl +\.

.. $ sleep 10
^\Quit

→ Это эквивалентно kill -3 pid. Программы, запущенные в пространстве пользователя, не игнорируют sigquit.

Существует также ряд сочетаний клавиш Magic SysRq. Один из более интересных - это: Alt+SysRq+k. Это уничтожает каждый процесс на текущей виртуальной консоли. Если один из Ваших ttys полностью и крайне повреждается, это может использоваться для возвращения. На tty под управлением X.org это может использоваться для уничтожения X без милосердия.

Ключ SysRq, на большинстве клавиатур, то же как Ключ Печати. На моем ноутбуке это может быть вызвано с помощью ключа Fn; Т.е. Alt→Fn→Print→k в том порядке.

Вот некоторые ярлыки управления базовым процессом:

  • Ctrl+Z: приостановите процесс (плюс bg возобновиться в фоновом режиме, fg повысить до переднего плана)
  • Ctrl+C: вежливо попросите, чтобы процесс закрылся теперь
  • Ctrl +\: беспощадно уничтожьте процесс, который в настоящее время находится на переднем плане
  • Alt+SysRq+s: Запишите данные к диску (всегда делают это прежде, чем уничтожить что-либо важное),
  • Alt+SysRq+s, k: беспощадно уничтожьте все текущие процессы на данной виртуальной консоли
  • Alt+SysRq+s, b: беспощадно перезагрузка без размонтирования,
  • Alt+SysRq+r, e, я, s, u, b: Безопасно перезагрузка, даже если система крайне повреждается,

Примечание: Ctrl+Z, в отличие от Ctrl+C и Ctrl + \, также работает на man, vi, less,и т.п..

Когда в сомнении, follwing процедура будет почти всегда работать:

~$ sleep 10
^Z
[5]+  Stopped              sleep 10
~$ ps
  PID TTY          TIME CMD
 4804 pts/0    00:00:00 bash
 6207 pts/0    00:00:00 sleep
 6208 pts/0    00:00:00 ps
~$ kill -9 6207
[5]+  Killed                  sleep 10
~$ 

^Z конечно, указывает, что Ctrl+Z был нажат.


Для более всестороннего взгляда на Оболочки и Терминалы, также см. мои ответы на:

144
ответ дан 7 December 2010 в 20:00
  • Попробуйте один из них:

    Ctrl + 4

    Ctrl + \


  • Или:

    Ctrl + Z и затем выполните:

    kill %1

где %1 - номер задания, которое было возвращено при нажатии Control - Z . Добавьте -9, чтобы заставить убить.


Когда вы находитесь в текстовой консоли, вы также можете попробовать: Ctrl - SysRq . Ядро должно убить процесс.

Или SysRq - k , убейте все процессы на текущей виртуальной консоли (можно также убить программы X и svgalib).

Примечание. Когда магические ключи SysRq используются для уничтожения замороженной графической программы, у программы нет шансов восстановить текстовый режим. Это может сделать все нечитаемым.

См .: Ключ Magic SysRq и его комбинации команд.

0
ответ дан 7 December 2010 в 20:00

Иногда CTRL + C отправляется в неправильную программу или входной канал. Это особенно характерно для таких редакторов, как vi, с командами с конвейерным выводом, сложными командами bash, включающими циклы и т. Д.

Простое и быстрое решение - приостановить задание CTRL + Z , а затем уничтожить его по номеру задания: kill %1 или kill -9 %1 и т. Д.

0
ответ дан 7 December 2010 в 20:00

Чтобы выйти из человека , используйте q.

0
ответ дан 7 December 2010 в 20:00

Попробуйте Ctrl+Alt+Backspace

При использовании человечности 10.04, Вы хотите позволить этому ключу работать.

Включить Клавишу Backspace высокого звука управления

Система Goto-> Предпочтения-> Клавиатура

Выберите вкладку Layouts и нажмите на Параметры макета.

Выберите Сочетание клавиш, чтобы уничтожить X-сервер и включить Управление + Высокий звук +Backspace.

Примечание:

Нажатие Ctrl-Alt-Backspace перезапустит Ваш X-сервер.

-1
ответ дан 7 December 2010 в 20:00

Вы можете попробовать Ctrl + \

0
ответ дан 7 December 2010 в 20:00

Возможно, вы изменили ярлык копирования с:

CTRL + SHIFT + C

CTRL + C

Таким образом, когда вы пытаетесь убить процесс, CTRL < / kbd> + C не работает.

Попробуйте заменить ярлык копирования на CTRL + SHIFT + C .

0
ответ дан 7 December 2010 в 20:00

Откройте «Терминал» → «Настройки» → «Ярлыки» и выполните поиск, если вы по ошибке заменили какую-либо клавишу на Ctrl+C.

1
ответ дан 26 July 2020 в 03:22

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

Похожие вопросы: