Що робити, коли Ctrl-C не вбиває запущену роботу?


98

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

Відповіді:


141

Надішліть сигнал SIGQUIT за допомогою Ctrl+ \.

.. $ sleep 10
^\Quit

→ Це еквівалентно kill -3 pid. Програми, що працюють в просторі користувача, не ігнорують sigquit.

Також є набір комбінацій клавіш Magic SysRq . Один з найбільш цікавих - це: Alt+ SysRq+ k. Це вбиває кожен процес на поточній віртуальній консолі. Якщо хтось із ваших TTys повністю і повністю розбитий, це можна використати для повернення назад . На tty, що працює на X.org, його можна використовувати для вбивства X без милості.

Клавіша SysRq на більшості клавіатур збігається з клавішею друку. У моєму блокноті його можна викликати за допомогою клавіші Fn; Т.е. Alt → Fn → Друк → 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: Безпечний г Eboot х VEN я е в и ystem є у tterly б 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натиснуто.


Для більш поглибленого огляду снарядів та терміналів, також дивіться мої відповіді на тему:


3
Працює для "сну 10", але все ще не працює для "людини" або "vi". Очевидно, що "убий -9 pid" працює на вбивство обох процесів. Я щось пропускаю?
Олів'є Лалонде

3
Ctrl + Z працює з такими речами, як менше, man, vi тощо. Ви можете вбити їх, роблячи , psщоб побачити їх ідентифікатор процесу і вбити їх з допомогою kill pidабо, якщо ви не дбаєте про інших примірниках програми, killall vi. У будь-якому випадку, Ctrl-Z завжди, здається, працює.
Стефано Палацо

5
Ви також kill %%можете вбити останню роботу, і kill %5де 5 - номер завдання, показаний на jobs.
Олів'є Лалонде

2
Ctrl- \ посилає SIGQUIT , а не SIGKILL. Є деякі важливі відмінності між SIGQUIT і SIGKILL. en.wikipedia.org/wiki/SIGQUIT
Джуліано

4
Як натискати Ctrl+, \ коли \ в макеті клавіатури немає жодної клавіші?
Форивін


8

Іноді повідомлення CTRL+Cнадсилається в неправильну програму або вхідний канал. Це особливо часто зустрічається з такими редакторами, як vi, наприклад , команди з трубопровідним висновком, складні команди bash, що включають петлі тощо.

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


6
  • Спробуйте один із таких:

    Ctrl+4

    Ctrl+\


  • Або:

    Ctrl+ Zта запустіть:

    kill %1

Де %1номер роботи, яку було повернуто при натисканні Control- Z. Додати, -9щоб примусити вбити.


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

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

Примітка. Коли магічні клавіші SysRq використовуються для знищення замороженої графічної програми, програма не має шансів відновити текстовий режим. Це може зробити все нечитабельним.

Див.: Чарівна клавіша SysRq та її комбінації команд.



0

Можливо, ви змінили ярлик копії з:

CTRL+ SHIFT+C

До

CTRL+C

Таким чином, при спробі вбити процес CTRL+ Cне працює.

Спробуйте замінити ярлик копії на CTRL+ SHIFT+ C.


1
Зміна ярлика копії не має значення, щоб змусити процес припиняти!
SuB

Чи можете ви трохи розширити свою відповідь? Крок за кроком було б ідеально, перш за все, щоб ОП може слідувати разом з вашою пропозицією. :)
ThatGuy

Це фактично мені допомогло. Я звик до CTRL + C на MacOS, і не зрозумів, що команда Ubuntu була CTRL + SHIFT + C
ratskin

-1

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

Якщо ви використовуєте ubuntu 10.04, ви хочете включити цей ключ для роботи.

Щоб увімкнути Control- Alt-Backspace

Goto System -> Налаштування -> Клавіатура

Перейдіть на вкладку "Макети" та натисніть " Параметри макета" .

Виберіть Послідовність клавіш, щоб вбити X-сервер і ввімкнути Control+ Alt+Backspace .

Примітка:

Натискання Ctrl- Alt- Backspaceперезапустить ваш X-сервер.


Редагував питання, щоб зрозуміти, що я хочу вбити процес зсередини терміналу.
Олів'є Лалонде
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.