Что делать, если Ctrl-C не убивает запущенную работу?
Иногда процессы игнорируют сигнал SIGINT, посылаемый Ctrl-C в Bash. Например, man а также vi, Предполагая, что вы не хотите гуглить или читать руководство по выходу из запущенного процесса, есть ли какая-нибудь последовательность клавиш, которая всегда будет работать (не выходя из терминала)?
7 ответов
Отправьте сигнал SIGQUIT с помощью Ctrl + \.
.. $ sleep 10
^\Quit
→ Это эквивалентно kill -3 pid, Программы, запускаемые в пользовательском пространстве, не игнорируют сигнатуры.
Существует также набор сочетаний клавиш Magic SysRq. Один из наиболее интересных: Alt + SysRq + k. Это убивает каждый процесс на текущей виртуальной консоли. Если один из ваших ttys полностью и полностью сломан, это может быть использовано для возврата. На tty, работающем с X.org, его можно использовать, чтобы убить Х без пощады.
Клавиша 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, i, s, u, b: безопасно перезагружать систему, если система полностью взломана,
Примечание: 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.
Для более глубокого взгляда на Оболочки и Терминалы, также посмотрите мои ответы на:
Попробуйте один из них:
Ctrl+4
Ctrl+\
Или же:
Ctrl+Z и затем запустите:
kill %1
куда %1 номер задания, которое было возвращено, когда вы нажали Control-Z. добавлять -9 заставить убить.
Когда вы находитесь в текстовой консоли, вы также можете попробовать: Ctrl-SysRq. Ядро должно убить процесс.
Или SysRq-k, убить все процессы на текущей виртуальной консоли (может также убить программы X и svgalib).
Примечание. Когда магические ключи SysRq используются для уничтожения замороженной графической программы, программа не имеет возможности восстановить текстовый режим. Это может сделать все нечитаемым.
Иногда CTRL+C отправляется не той программе или входному каналу. Это особенно характерно для таких редакторов, как viс командами с конвейерным выводом, сложными командами bash, включающими циклы и т. д.
Простое и быстрое решение - приостановить работу CTRL+Z, а затем уничтожить ее по номеру задания: kill %1 или же kill -9 %1, так далее.
Возможно, вы изменили ярлык копии с:
CTRL+SHIFT+C
к
CTRL+C
Таким образом, когда вы пытаетесь убить процесс, CTRL+C не работает.
Попробуйте заменить ярлык копирования на CTRL+SHIFT+C.
Чтобы выйти из человека, используйте qЧтобы оставить ви использовать :q
Откройте Терминал → Настройки → Ярлыки и выполните поиск, если по ошибке вы заменили любую клавишу на Ctrl+C.
Попробуйте Ctrl+Alt+Backspace
Если вы используете Ubuntu 10.04, вы хотите, чтобы этот ключ работал.
Чтобы включить Control-Alt-Backspace
Перейти в Система -> Настройки -> Клавиатура
Выберите вкладку "Макеты" и нажмите " Параметры макета".
Выберите Последовательность клавиш, чтобы убить X-сервер и включить Control + Alt +Backspace.
Замечания:
Нажатие Ctrl-Alt-Backspace перезапустит ваш X-сервер.