2

Иногда, когда я разрабатываю на своем Mac, я получаю процесс, который зависает. Когда это произойдет, я попробую следующее:

  1. Ctrl + C в окне активного терминала
  2. Если ничего не произойдет, я открою новое окно терминала и сделаю kill -SIGTERM {PID}
  3. Если все еще ничего, закройте окно терминала.

Я сталкиваюсь с ситуациями, когда после выполнения 1 и 2 PID все еще указан в моем списке процессов. Другими словами, похоже, что нет опции командной строки для уничтожения процесса - все, что я могу сделать, это уничтожить терминал.

В средах командной строки Linux у нас явно нет варианта 3. Так работают ли прерывания командной строки по-другому? Есть ли другой способ убить процессы, которые я пропускаю? Какой вариант «последней инстанции» для уничтожения процесса Linux?

2 ответа2

5

То же, что и в OS X: отправьте SIGKILL.

0

Вы можете попробовать Ctrl + \ (управление обратной косой чертой), который отправляет сигнал QUIT. Это часто работает, когда SIGINT пойман в ловушку.

Иногда процесс будет игнорировать сигналы, потому что он остановлен.

Вы можете использовать что-то вроде этого, чтобы по возможности грациозно завершить процесс:

KILL() {
  kill -CONT "$@"
  kill -TERM "$@"
  kill -HUP "$@"
  sleep 1
  kill -KILL "$@"
}

KILL 12345

Даже это не всегда может работать. Если есть какая- то ошибка ввода / вывода , например, например, отсутствующее устройство.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .