Я знаю, що є ctrl+ c, але іноді це не працює. На робочому столі Ubuntu я можу просто закрити вікно терміналу та відкрити нове, коли це станеться, але як би це було вирішено за допомогою CLI на сервері Ubuntu (без перезавантаження поля)?
Я знаю, що є ctrl+ c, але іноді це не працює. На робочому столі Ubuntu я можу просто закрити вікно терміналу та відкрити нове, коли це станеться, але як би це було вирішено за допомогою CLI на сервері Ubuntu (без перезавантаження поля)?
Відповіді:
CTRL+Cвідправить SIGINTу заявку. Додаток може налаштувати обробник цього сигналу або він може ігнорувати сигнал. За замовчуванням немає обробника, і SIGINTвін вбиває додаток.
Ви можете скористатись CTRL+\яким відправити SIGQUIT. Це також генерує основний дамп, якщо межа ядра не дорівнює нулю.
Ви можете призупинити процес і повернутися до оболонки CTRL+Z, це зупинить виконання процесу і повернеться до підказки оболонки. Процес буде в пам'яті, і він буде доступний як завдання в поточній оболонці. Потім можна використовувати kill -SIGNAL %%або kill -SIGNAL %<job_ID>надіслати сигнал на цю роботу. Наприклад, щоб вбити останню роботуkill -9 %%
Якщо жоден з них не працює, ви завжди можете надсилати їх SIGTERM, як крайній спосіб, SIGKILLякий припинить будь-який процес. Цей сигнал, як і будь-який інший сигнал, повинен надсилатися тому ж користувачу, що і процес, який ви намагаєтеся зупинити, або як root. Для того, щоб відправити SIGKILLпроцес, обери процес з ps auxабо ps -edf, а потім запустити kill -SIGKILL <process_ID>, де <process_ID>є PIDстовпець psвиведення.
Сигнали не можуть бути доставлені, якщо процес знаходиться в безперебійному дзвінку. Безперебійні дзвінки - це функції ядра, які неможливо зупинити і зазвичай трапляються через поганий драйвер (наприклад, драйвер, який не є ретентом ). Процес, який перебуває у режимі безперебійного сну, не можна зупинити, поки виклик не завершиться або сервер не перезавантажиться.
Якщо процес стає зомбі , він не використовуватиме жодних ресурсів, лише займаючи місце в таблиці процесів. Процес зомбі не може приймати сигнали.
Список сигналів для поточної архітектури можна знайти за допомогою kill -l
Див ЧОЛОВІК сторінок kill, psі bash. Щоб переглянути сторінку чоловіка, використовуйте щось на кшталт:man ps
Якщо у вас є повний доступ до консолі, ви можете зробити Alt- F1..12і отримати нову консоль.
Звідти ви можете зробити перелік таких процесів:
ps aux | grep <process-name>
Потім виконайте killідентифікатор процесу:
kill -9 <pid>
Якщо у вас немає повного доступу до консолі, просто відкрийте інше вікно терміналу (можливо, через PuTTY або подібне), і виконайте вищевказаний процес та перерахуйте кроки.
Ctrl C надсилає SIGINT до вашого запущеного процесу. Якщо ви не хочете відкривати іншу консоль, ви можете надіслати SIGQUIT за допомогою Ctrl \. Це стосується більшості програм, які вивішуються щодня, яких SIGINT не робить.
Я особисто хотів способом надіслати SIGKILL ярликом, але не знаю, як це зробити.
Я вважаю pgrepі pkillпростішим у використанні, ніж killіз явним ідентифікатором процесу.
Крім того, замість того, щоб починати з сигналу 9 (SIGKILL), розгляньте, як почати з SIGTERM за замовчуванням (15). Це дасть можливість виграшно закінчити процес (якщо він зможе).
pkill -15 thingі pkill thingмає бути рівнозначним.
Ось як би це працювало. Скажімо, ntpd повішено.
Які процеси? (Ви можете перейти до pkill, якщо ви вважаєте, що у вас не буде помилок).
$ pgrep -fl ntp
1034 /usr/sbin/ntpd
1037 /usr/sbin/ntpd
Вбийте процеси:
$ pkill ntpd
Використовуйте pgrepще раз, щоб побачити, чи вдалося це зробити.
Якщо ні, зрештою переходите до pkill -9.
Ви перейдете на новий термінал, знайдете PID застряглого процесу (використовуючи ps), а потім використовуйте killдля вбивства процесу. Я б спочатку скористався kill (PID). Якщо це не працює, я б використовував kill -9 (PID). Якщо це не зупинить процес, машину потрібно перезавантажити.
Cntrl+ \працював для мене (де Cntrl+ cчи zне працював)