Я знаю, что есть ctrl+ c, но иногда это не работает. В рабочем столе Ubuntu я могу просто закрыть окно терминала и открыть новое, когда это произойдет, но как бы это решить, используя CLI на сервере Ubuntu (без перезапуска коробки)?
server
command-line
сумасшедший
источник
источник
Ответы:
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и получить новую консоль.
Оттуда вы можете сделать листинг процесса следующим образом:
Затем
kill
введите идентификатор процесса:Если у вас нет полного доступа к консоли, просто откройте другое окно терминала (возможно, через PuTTY или аналогичное) и выполните перечисленные выше процессы и уничтожьте шаги.
источник
Ctrl C отправляет SIGINT вашему запущенному процессу. Если вы не хотите открывать другую консоль, вы можете отправить SIGQUIT с помощью Ctrl \. Это будет касаться большинства повседневных приложений, которые не поддерживает SIGINT.
Я лично хотел послать SIGKILL с ярлыком, но я не знаю, как это сделать.
источник
Я считаю
pgrep
иpkill
проще в использовании, чемkill
с явным идентификатором процесса.Кроме того, вместо того, чтобы начинать с сигнала 9 (SIGKILL), рассмотрите возможность начать с SIGTERM по умолчанию (15). Это даст возможность завершить процесс изящно (если это возможно).
pkill -15 thing
иpkill thing
должен быть эквивалентным.Вот как это будет работать. Допустим, что ntpd завис.
Каковы процессы? (Вы можете перейти к pkill, если считаете, что у вас не будет ложных срабатываний).
Убить процессы:
Используйте
pgrep
снова, чтобы увидеть, если это было успешно.Если нет, в конце концов перейдите к
pkill -9
.источник
Вы бы переключились на новый терминал, нашли PID застрявшего процесса (используя
ps
), а затем использовали,kill
чтобы убить процесс. Я бы сначала использовалkill (PID)
. Если это не сработает, я бы использовалkill -9 (PID)
. Если это не останавливает процесс, машину необходимо перезагрузить.источник
Cntrl+ \работал для меня (где Cntrl+ cили zне работал)
источник