Руководство

Служба, застрявшая на Stopping...

Оснастка показывает Stopping и не двигается. Обычный ответ - Диспетчер задач, догадка, в каком svchost.exe она живёт, и «Снять задачу», что завершает и каждую другую службу в этом процессе, не говоря вам, какие это были.

Почему так происходит

  • Служба не отвечает на запрос остановки. Windows просит её вежливо и ждёт. Служба, которая зависла или ждёт чего-то, что не вернётся, не отвечает никогда.
  • Что-то, что от неё зависит, всё ещё работает. Диспетчер отказывает в остановке, чтобы не сломать другую службу, а оснастка показывает это как ожидание.
  • Она делит процесс с другими. Большинство служб Windows живёт внутри общего svchost.exe. Завершение этого процесса завершает все они, и это именно то, что делает Диспетчер задач, не называя их.

Посмотрите, прежде чем что-либо завершать

Спросите, что унесло бы с собой завершение. Ничего не произойдёт, пока вы не уберёте --dry-run.

$ bws kill Spooler --dry-run

Предпросмотр называет процесс по номеру, называет каждую другую службу, живущую в нём, и показывает два шага вместо одного: попросить службу остановиться и, только если это не сработало, завершить процесс. Служба, которая останавливается сама, не завершается принудительно никогда.

  • --force пропускает вежливый шаг и сразу завершает процесс. Он меняет план, а не его выполнение, поэтому предпросмотр показывает один шаг вместо двух, и разница видна до того, как что-либо произойдёт.
  • --restart возвращает всё обратно, когда процесса уже нет, - запись, о которой вы спрашивали, и всё, что делило её процесс. Без него машина остаётся с этими службами остановленными, а отчёт говорит, как запустить их снова.
  • Отказ приходит раньше кнопки. Драйвер, процесс, который защищает система, служба, остановку которой диспетчер не принимает - отказ при построении плана, с причиной, а не после шестидесяти секунд ожидания.
  • Предупреждение, когда это важно. Если запись такая, без которой машина не работает, план говорит об этом: остановка обрушивает машину, а не только службу.

Завершение процесса - единственное, что делает этот инструмент и от чего никто не может отказаться за машину. Поэтому это отдельная команда, поэтому предпросмотр называет каждую службу, которую он уносит с собой, и поэтому вежливый шаг идёт первым, пока вы не скажете иначе.

Более безопасный порядок

  1. Посмотрите, что это. bws show Spooler - процесс, что от неё зависит, от чего зависит она сама и принимает ли она запросы остановки вообще.
  2. Попробуйте обычную остановку как план. bws stop Spooler --dry-run --dependents. Если ответ - отказ, он говорит, какая из трёх причин.
  3. Если она не останавливается, посмотрите, чего стоит её завершение. bws kill Spooler --dry-run и прочитайте список служб, делящих этот процесс.
  4. Затем сделайте это, с дорогой назад. bws kill Spooler --restart. Отчёт заканчивается тем, что не сработало, и командами, возвращающими всё на место.

Все четыре работают так же в окне: щёлкните строку правой кнопкой, выберите Force stop..., прочитайте план, а кнопка под ним названа по тому, что она сделает.

Почему не просто Диспетчер задач

Потому что он отвечает на другой вопрос. Диспетчер задач знает о процессах, а эта проблема - о службах, и они не соответствуют друг другу один к одному.

Общий svchost.exe может содержать десяток служб. Диспетчер задач завершит его, не сказав, какие это двенадцать, ни одна не вернётся сама, и ничто потом не скажет вам, что остановилось. EDR, который отмечает процесс, завершающий svchost.exe, делает свою работу, и он не может отличить ваш щелчок от чего-либо другого.