9

Из того, что я знаю, каждый раз, когда мы хотим остановить приложение (или замороженное приложение), мы будем запускать TaskManager, выбирать приложение, переходить Go to Process и завершать процесс. "Завершающий процесс" предпочтительнее "Завершающего задания" (иногда "Завершающее задание" все равно не работает).

Изображение для End Task:

Изображение для завершения процесса:

Однако http://technet.microsoft.com/en-us/library/bb726964.aspx:

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

Они говорят, что предпочтительнее "Завершить задачу", потому что процесс останавливается, когда я останавливаю приложение. Но я совсем не понимаю их логику. Почему бы просто не остановить процесс?

Какие преимущества имеет Ending Task перед Ending Process?

4 ответа4

13

Для программ, имеющих хотя бы одно окно, « End Task» делает то же самое, что и нажатие кнопки "Закрыть" X - оно отправляет сообщение WM_CLOSE в это окно, прося его закрыть. (Для консольных окон эквивалент CTRL_CLOSE_EVENT.) Программа может предложить пользователю сохранить изменения или выполнить различные задачи очистки. Если процесс соответствует требованиям, диспетчер задач ждет несколько секунд и продолжает процесс, если он все еще выполняется.

Если процесс заморожен или иным образом не обрабатывает оконные сообщения, которые он получает, то, конечно, ни кнопка « Завершить задачу», ни кнопка «Закрыть» не могут работать. В таких случаях Windows, как правило, просит вас принудительно завершить программу, но только после того, как она предоставит программе достаточно времени для ответа.

Между тем кнопка « Завершить процесс» не связана с задачами или окнами - она вызывает функцию TerminateProcess() и Windows немедленно уничтожает процесс, не уведомляя его и не предоставляя ему возможности для очистки.

(Такие ресурсы, как память, освобождаются автоматически после завершения процесса; однако, если программа создала их, могут остаться различные временные файлы, и, конечно, существует риск повреждения данных, если процесс завершается в процессе сохранения данных.)

Смотрите также:

2

Два других ответа прекрасно объясняют, в чем разница с точки зрения того, что происходит, но просто чтобы показать, как они различаются с точки зрения того, как это происходит, первый приказывает программе закрыться, а второй говорит Windows убить программа.

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

1

Для уточнения: End Task попытается изящно закрыть приложение. Если он завис, он даст вам возможность «закончить сейчас». Это дает вам два преимущества по сравнению с уничтожением процесса (который просто перебивает его):

  1. включает восстановление после сбоя для приложений, зарегистрированных в Windows Vista (и выше) Краткое описание MSDN
  2. позволяет отправить сообщение об ошибке
-7

Это просто несоответствие в терминологии. Вероятно, справочная служба Microsoft говорит, что западное побережье решает задачу, в то время как восточное побережье использует технически правильный процесс.

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

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