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

91

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

    
задан Olivier Lalonde 20.11.2010 в 12:47
источник

7 ответов

124

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

.. $ sleep 10
^\Quit

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

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

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

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

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

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

В случае сомнений процедура запроса всегда будет работать:

~$ 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 .

Для более глубокого изучения корпусов и терминалов также см. мои ответы на:

  • Что такое оболочки?
  • Почему виртуальный терминал" виртуальный "и что / почему / где" настоящий "терминал?
ответ дан Stefano Palazzo 20.11.2010 в 13:07
источник
12

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

    
ответ дан Benjamin 20.11.2010 в 13:06
8

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

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

    
ответ дан tylerl 20.11.2010 в 21:18
4
  • Попробуйте выполнить одно из следующих действий:

    CTRL + 4

    Ctrl + \

  • Или:

    Ctrl + Z , а затем запустите:

    kill %1

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

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

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

Note: When magic SysRq keys are used to kill a frozen graphical program, the program has no chance to restore text mode. This can make everything unreadable.

Смотрите: Магический ключ SysRq и его комбинации команд.

    
ответ дан kenorb 01.10.2012 в 13:47
3

Чтобы выйти из man , используйте q Чтобы оставить vi , используйте :q

    
ответ дан antivirtel 20.11.2010 в 23:46
-1

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

Если вы используете ubuntu 10.04, вы хотите включить этот ключ.

Чтобы включить Control - Alt - Backspace

Перейти к системе - > Настройки - > Клавиатура

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

Выберите последовательность клавиш, чтобы убить сервер X , и включите элемент управления + Alt + Backspace .

Примечание:

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

    
ответ дан karthick87 20.11.2010 в 12:56
-2

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

CTRL + SHIFT + С

Для

CTRL + С

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

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

ответ дан Minter 20.11.2016 в 20:36